现在的位置: 首页 > 综合 > 正文

Synthesized property ‘xx’ must either be named the same as a compatible ivar or must explicitly name

2013年05月25日 ⁄ 综合 ⁄ 共 761字 ⁄ 字号 评论关闭

http://www.cocoachina.com/bbs/read.php?tid-26112-keyword-self.html

在 32-bit 时,如果类的 @interface 部分没有进行 ivar 声明,但有 @property 声明,在类的 @implementation 部分有响应的 @synthesize,则会得到类似下面的编译错误

Synthesized property 'xX' must either be named the same as a compatible ivar or must explicitly name an ivar

在 64-bit时,运行时系统会自动给类添加 ivar,添加的 ivar 以一个下划线"_"做前缀。

上面声明部分的 @synthesize window=_window; 意思是说,window 属性为 _window 实例变量合成访问器方法。


MyClass.h
@interface MyClass : NSObject {
    MyObject * _myObject;
}
@property (nonatomic, retain) MyObject *myObject;
@end

MyClass.m
@synthesize myObject = _myObject;


 如果你用self._myObject
= aMyObject; 或者 myObject = aMyObject; 你会得到一个错误, 为什么呢, 这里就是和Obj-c的存取方法有关了.
说白了很简单 , 大家都知道, @property (nonatomic, retain) MyObject *myObject; 是为一个属性设置存取方法, 只是平时我们用的方法名和属性名是一样的,现在你把它写成不同的名字, 就会很清楚了. _myObject是属性本身, myObject是存取方法名,
现在我们知道self.是访问属性的存取方法了 

抱歉!评论已关闭.