使用Objective-C在接口和属性中的变量

ody*_*yth 2 objective-c ios4

有什么区别

@interface URLCacheConnection : NSObject {
    id <URLCacheConnectionDelegate> delegate;
}

@property (nonatomic, assign) id delegate;
@end
Run Code Online (Sandbox Code Playgroud)

@interface URLCacheConnection : NSObject {

}

@property (nonatomic, assign) id<URLCacheConnectionDelegate> delegate;
@end
Run Code Online (Sandbox Code Playgroud)

这两个类定义似乎都表现得相同.在接口和属性中定义变量的目的是什么?

Cal*_*leb 5

有什么区别......

主要区别在于,在第一种情况下,您将能够delegate在调试器中看到ivar,而在第二种情况下,您将无法看到.

在接口和属性中定义变量的目的是什么?

这部分是向后兼容的问题.合成实例变量的能力是Objective-C的一个相对较新的特性.此外,可能总是希望能够为内部使用创建实例变量并且没有相应的属性.