This is not intended to solve any particular problem, just looking to understand the nuances of properties in Objc.

say I have a class `Dude`

```
# Dude.h

@interface Dude: NSObject

@property (readonly, nonatomic) NSNumber *height;

@end

```

I extend the class in the implementation file but change the attributes.

```
# Dude.m

@interface Dude()

@property (readwrite, atomic) NSNumber *height;

@end

@implementation Dude
@end

```

I get an error. 

> 
> 'atomic' attribute on property 'height' does not match the property
>  inherited from 'Dude'
> 
> 
> 

So what is actually going on here. Is the property on the extension the same property? Am I just overriding the accessors?

Also when I change the order so that the public interface is `readwrite` but the private interface is `readonly` I get the error:

> 
> Illegal redeclaration of property in class extension 'Dude' (attribute
>  must be 'readwrite', while its primary must be 'readonly')
> 
> 
> 

This makes me think it's an entire redeclaration but now I am less sure about what is actually happening. Looking for clarification.