myprecious

[转]@synthesize window=_window之类的写法的理解

Fromhttp://blog.csdn.net/ch_soft/article/details/6981584

 

32位系统中,如果类的 @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 实例变量合成访问器方法。

 

也就是说,window属性生成存取方法是setWindow,这个setWindow方法就是_window变量的存取方法,它操作的就是_window这个变量。

 

下面是一个常见的例子

写法一:

@interface MyClass:NSObject{  

        MyObjecct *_myObject;

}

@property(nonamtic, retain) MyObjecct *myObject;

@end

 

@implementatin MyClass

@synthesize myObject=_myObject;

 

写法二:

@interface MyClass:NSObject{

      

}

@property(nonamtic, retain) MyObjecct *myObject;

@end

 

@implementatin MyClass

@synthesize myObject=_myObject;

 

这个类中声明了一个变量_myObject,又声明了一个属性叫myObject,然后用@synthesize生成了属性myObject的存取方法,这个存取方法的名字应该是:setmyObjectgetmyObject@synthesize myObject=_myObject的含义就是属性myObject的存取方法是做用于_myObject这个变量的。这种用法在AppleSample Code中很常见,

写法二中的_myObject在声明由系统自动生成

posted on 2012-07-11 11:20  myprecious  阅读(144)  评论(0编辑  收藏  举报

导航