如何解决使用Objective-C既可以使用接口变量,也可以使用属性变量
|| 之间有什么区别@interface URLCacheConnection : NSObject {
id <URLCacheConnectionDelegate> delegate;
}
@property (nonatomic,assign) id delegate;
@end
和
@interface URLCacheConnection : NSObject {
}
@property (nonatomic,assign) id<URLCacheConnectionDelegate> delegate;
@end
这两个类定义似乎都表现相同。在接口和属性中定义变量的目的是什么?
解决方法
首先,两者并不完全相同。对于第一个,编译器将允许您将任何对象分配为委托,而对于第二个,编译器将抱怨您分配的对象是否不符合URLCacheConnectionDelegate协议。当然,这很容易解决。
在Apple的Objective-C编译器的早期版本中,需要显式声明ivar支持属性才能使用@synthesize。在某个时候(我确切地忘记了什么时候),他们对其进行了更改,以允许编译器/运行时自动创建所需的ivar。
,
...之间有什么区别
主要区别在于,在第一种情况下,您可以在调试器中看到
delegate
ivar,而在第二种情况下,您将看不到。
定义的目的是什么
接口和as中的变量
财产?
部分原因是向后兼容。综合实例变量的能力是Objective-C的一个相对较新的功能。此外,可能总是希望能够创建供内部使用并且没有相应属性的实例变量。
, 不同之处在于实现方式。使用第一个,您可以@synthesize getter和setter并可以访问声明的内部变量。
在第二个步骤中,您将必须使用@dynamic并对getter和setter进行编码,因为没有XCode可以为其生成代码的内部变量。
那是我的读物-很高兴知道这是错的。
<稍后>是的-错误:-(
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。