转载请标明出处:
http://blog.csdn.net/zhangxingping
运行时的区别
总体来说,属性的行为在新的运行时系统和老的运行时系统上是一致的。但是有一个区别:现代的运行时系统支持自动变量绑定;而老的运行时系统则不支持。
在老的运行时系统中,我们必须为属性提供一个相同名称、相同类型的实例变量来进行自动绑定;或者是手动地为属性绑定既存的实例变量。而在现代运行时系统中,如果我们没有为属性绑定实例变量,编译器会自动为我们增加一个实例变量。如下:
@interface MyClass :NSObject
{
float sameName;
float otherName;
}
@property float sameName;
@property float differentName;
@property float noDeclaredIvar;
@end
@implementation MyClass
@synthesize sameName;
@synthesize differentName =otherName;
@synthesize noDeclaredIvar;
@end
老运行系统的编译器会在@synthesize noDeclaredIvar;处报告错误;而现代运行时系统的编译器则会自动增加一个实例变量来表示noDeclaredIvar。