`
fireflylover
  • 浏览: 108018 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

@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

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

 

参数类型详解

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

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];  }

  }

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics