The problem is that the property number is a private property because you declared it in the interface section in your .m file. Declare it in your header myclass.h files interface block instead.. A private property, ivar, or method is one which can only be accessed from within an instance of your myClass object by using the self keyword (which is basically a pointer to the myClass instance within which you are currently executing).
Moving your property declaration to the header file will make the property accessible from outside the class instance. In other words, it makes it public.
If you want to restrict access to the data the property points to, define the property in the header file as a readonly property:
MyClass.h
@interface MyClass : NSObject
@property (nonatomic, readonly) unsigned int number;
@end
Then in your .m file create a private ivar manually and override the getter for the number property as follows:
MyClass.m
@implementation MyClass {
//Instance variable (ivar)
unsigned int _number;
}
unsigned int number()
{
return _number;
}
@end
That way a subclass (or anyone else for that matter) can't muck with the value of number. You can then access number in your main function as follows:
MyClass* myClass = [[MyClass alloc] init];
unsigned int newNumber = myClass.number; //There is no such selector called getNumber BTW, only number.