"属性"(property) 是Objective-C 的一项特性,用于封装对象中的数据
硬编码:
@interface EOCPerson : NSObject {
@public
NSString *_firstName;
NSString *_lastName;
@private
NSString *_someInternalData;
}
@end
上面的写法问题是: 对象布局在编译期(compile time) 就已经固定了. 只要碰到访问_firstName变量的代码, 编译器就把其替换为"偏移量"(offset), 这个偏移量是"硬编码"(hardcode), 表示该变量距离存放对象的内存区域的起始地址有多远.这个距离并不会因为后面添加的实例变量而改变
稳固的"应用程序二进制接口"(Application Binary Interface, ABI):
Objective-C把实例变量当做一种存储偏移量所用的"特殊变量"(special variable), 交由"类对象"(class object) 保管. 偏移量会在运行期查找, 如果类的定义变了, 那么存储的偏移量也就变了.这样就能做到动态添加实例变量
ABI定义的其中一项就是生成代码时所应遵循的规范.
@dynamic 关键字: 不需要自动创建实现属性所用的实例变量,也不要为其创建存取方法