在 Obj-c 中,在 @interface 中声明变量时
@接口:NSObject{
我的对象* 我的对象}
@property(不安全,非原子)MyObject* myObject;
对比。仅将其声明为属性
@接口:NSObject{}
@property(不安全,非原子)MyObject* myObject;
@结尾
这里不声明任何var吗?
问候
基督教
@property
定义一个接口,而不是一个实现。就您而言,您正在定义一个读写属性。这意味着您承诺实施-myObject
and -setMyObject:
。这与ivars无关。
现在,实现这些方法的最常见方法是让它们由 ivar 支持。为了方便起见,ObjC 允许您使用 ivar 存储自动生成所需的方法@synthesize myObject=myObject_;
这表示“为属性创建所需的方法myObject
使用自动创建的 ivar 称为myObject_
” 伊瓦尔myObject_
是一个真正的 ivar,您可以正常访问它(尽管您通常不应该;您应该使用访问器)。
而不是使用@synthesize
,你可以实施-myObject
and -setMyObject:
。你甚至可以使用@dynamic myObject;
告诉编译器“不要担心这个属性的实现;它将在运行时正确处理。”
之间存在一些差异@property
只是声明方法,但原则上,这一行:
@property (nonatomic, readwrite, strong) MyObject* myObject;
在概念上与此相同:
- (MyObject *)myObject;
- (void)setMyObject:(MyObject *)anObject;
自己声明 ivar 在这里没有真正的影响。您仍然需要以某种方式实现这些方法。如果您命名的 ivar 与 ivar 相同@synthesize
正在使用,那么@synthesize
只是不会创建新的 ivar。
作为实践问题,我不鼓励人们再声明 ivars。我建议只使用公共和私有属性@synthesize
创建任何需要的 ivars。如果由于某种原因你必须有一个手动 ivar,那么我建议在@implementation
块而不是@interface
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)