2011-04-30 89 views
0

可以说我有以下对象定义(注意错误):目标c - @变量定义的属性,会发生什么?

@interface User : NSObject { 
    NSString* pid; 
} 

@property (nonatomic, retain) NSString* publicId; 

@end 

通知错误了吗?我定义了pid,但是在property中写了publicId。

这不会导致任何编译器错误(我用的XCode 4 iOS设备),实际上似乎在大多数情况下工作(我可以设置和获取虽然它没有在对象中定义的公共ID!)。如果我试图想象@property和@synthesize是做什么的,我似乎无法理解这不会产生编译器错误!

为什么这个问题似乎工作?有任何想法吗?

回答

3

取决于在什么平台上你靶向,publicId由动态生成实例变量的支持。不使用pid。 (这是64位Mac OS X和iOS版真;对于32位Mac OS X,这应该与警告或错误指示类的不完备性进行编译。)

+0

谢谢!动态 - 在运行期间还是在编译期间? – Yoav 2011-04-30 19:01:18

+0

@Yoav编译时间。使用Obj-C 2.0,在接口声明中不再需要花括号之间的任何东西。当Interface Builder在Xcode 4中为我生成它时(控制 - 从控件拖动到接口文件以自动生成属性,综合,设置为零,并释放代码),我立即删除它们:无需保留不必要的行代码在重构时同步 – 2011-04-30 19:13:28

相关问题