是否有必要在@interface中声明ivars以匹配属性?

理想评*_*论学派 4 properties interface objective-c instance-variables

可能重复:
Objective-C 2.0中的属性和实例变量

我对这两个代码段感到困惑:

第一:

//.h
@interface Student : NSObject {

}
    @property (nonautomic, copy) NSString *name;
    @property (nonautomic, retain) NSNumber *age;
@end

//.m
@implementation Student
    @synthesize name;
    @synthesize age;
@end
Run Code Online (Sandbox Code Playgroud)

第二:

//.h
@interface Student : NSObject {
    NSString *name;   // <<============ difference
    NSNumber *age;    // <<============ difference
}
    @property (nonautomic, copy) NSString *name;
    @property (nonautomic, retain) NSNumber *age;
@end

//.m
@implementation Student
    @synthesize name;
    @synthesize age;
@end
Run Code Online (Sandbox Code Playgroud)

这两个都可以工作.那么有必要在{}?中声明变量吗?

Jos*_*erg 10

从现代运行时(x86_64和ARM6 ...和iOS模拟器)开始,您不再需要声明合成的ivars.在第一个示例中,@synthesize正在为您添加实例变量.