Objective-C语言关键词property

来源:互联网 发布:美工最好的页游 编辑:程序博客网 时间:2024/06/07 22:18

@property

简介

Objective-C语言关键词,与@synthesize配对使用。

功能:让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。   

如:   

1、在头文件中:   

   @property int count; 

等效于在头文件中声明2个方法:   

- (int)count; 

-(void)setCount:(int)newCount; 

2、实现文件(.m)中   

@synthesize count; 

等效于在实现文件(.m)中实现2个方法。  

- (int)count 

   return count; 

-(void)setCount:(int)newCount 

    count = newCount; 

以上等效的函数部分由编译器自动帮开发者填充完成,简化了编码输入工作量。 

格式

声明property的语法为:   

@property (参数1,参数2) 类型 名字

如:   

@property(nonatomic,retain) UIWindow *window; 

其中参数主要分为三类:   

读写属性: (readwrite/readonly)   

setter语意:(assign/retain/copy)   

原子性: (atomicity/nonatomic)   

各参数意义如下:   readwrite 

产生setter\getter方法   

readonly 

只产生简单的getter,没有setter。   

assign 

默认类型,setter方法直接赋值,而不进行retain操作   

retain 

setter方法对参数进行release旧值,再retain新值。   

copy 

setter方法进行Copy操作,与retain一样   

nonatomic 

禁止多线程,变量保护,提高性能 

参数类型详解

  参数中比较复杂的是retaincopy,具体分析如下: 

getter分析

1@property(nonatomic,retain)test* thetest; @property(nonatomic ,copy)test* thetest; 

等效代码:   

-(void)thetest   

{   

   return thetest;   

}   

2、@property(retain)test* thetest; 

       @property(copy)test* thetest; 

等效代码:   

-(void)thetest   

{   

     [thetest retain];   

     return [thetest autorelease];   

} 

setter分析

1、   

@property(nonatomic,retain)test* thetest; 

@property(retain)test* thetest; 

等效于:   

-(void)setThetest:(test *)newThetest {   

     if (thetest!= newThetest) {   

         [thetestrelease];   

         thetest= [newThetest retain];   

      }   

}   

2、@property(nonatomic,copy)test* thetest; 

       @property(copy)test* thetest; 

等效于:   

-(void)setThetest:(test *)newThetest {   

     if (thetest!= newThetest) {   

         [thetestrelease];

        thetest= [newThetest copy];   

      }   

}