属性和实例变量不一样。
以下划线开头的变量其实不是属性,而是一种叫做合成的实例变量的东西。它的作用是与局部变量区分开来。
属性是由实例变量实现,然后再由编译器合成的。
因为属性和合成实例变量都是由实例变量实现的,所以它俩都能访问实例变量。
通常我认为使用合成的实例变量就是在使用属性,其实不然。
访问属性需要使用点语法,即self.property。
并且这样写会自动调用属性的accessor。
合成实例变量的名字是可以改变的,不一定非要是以下划线开头的那种。
如下所示:
@interface ViewController ()
@property (strong, nonatomic) NSString *someString;
@end
@implementation ViewController
@synthesize someString = otherString;
@end
动态属性
就是使用@dynamic关键字,相对于静态@synthesize属性,它可以在运行时生成accessor。
不过作者给出的代码写起来有点多,反正我是没见过有在程序里面使用@dynamic,等我用到的时候再说的吧,我姑且先记下来。
更改属性
可以通过扩展来改变,类扩展其实就是在.m中声明私有属性的地方。不过这种修改具有局限性,即,只能在扩展的实现里面才有效。我个人感觉没啥意思。