Property Declaration Attributes

题目不知道应该怎么翻译?硬是要翻译,只能是属性声明的特性。
 
对于这部分内容,《The Object C 2.0 Programming Language》的介绍是:
 
You can decorate a property with attributes by using the form @property(attribute[,attribute2,
...]). Like methods,properties are scoped to their enclosing interface declaration.For property
declarations that use a comma delimited list of variable names,the property attributes apply to all
of the named properties.If you use garbage collection,you can use the storage modifiers __weak and
__strong in a property’s declaration,but they are not a formal part of the list of attributes.
 
翻译一下:你可以通过以下格式去用attributes 修饰property :
 
@property(attribute[,attribute2,...])
就像方法一样,property的作用域限于它们自己封闭的接口声明中。尽管property的声明是使用了的attributes是被逗号分割的,但这些property attributes 的每一个都对property本身起作用。如果你使用GC,你可以在property的生命中使用weak和stronge这两个存储修饰符,但他们并不属于attributes的一部分。
 
接下来,介绍每一种attribute:
 
  • getter=getterName,setter=setterName:
   getter=和setter=修饰符用于指定property的get和set访问器(方法)。getter方法必须返回一个与property的类型匹配的值并且不需要带任何的参数访问该方法。setter方法必须带唯一的一个类型与property一致的参数并且返回值为void;
 
  • readOnly:
   声明property是readOnly的,默认为read/write。
也就是说在@implementation中,只有getter方法是需要的,或者,当使用@synthesized时,只会存在getter方法,而没有setter;
 
  • read/write:
   不解释。。。。
 
  • assign:
   指定setter方法只使用简单的赋值,这是默认的。
   如果你的应用使用GC时,如果你希望在遵守NSCopying协议的class中的property上使用assign时,你应该显式指明这个attribute,而不是希望系统默认使用它,否则的话,编译器会有警告。
 
  • retain:
   说明该对象的赋值时,对象需要保留(retain,也就是引用计数增加一次)(默认是assign)。
   这个attribute仅限于Object-C对象类型,不能对Core Foundation中的对象使用。
 
  • copy:
   说明赋值是赋给对象的拷贝。这个attribute仅使用于遵守NSCopying协议的对象类型上。
 
  • nonatomic
   指明访问器是非原子性的。默认是原子性的。
   默认的合成访问器(@synthesized修饰后产生的getter和setter方法)在多线程环境下是提供健壮的属性(property)访问的。这也就是说,getter和setter方法每一次都是“完整”的取值或赋值,不管有没有其他的线程在同时进行对该值的操作。
   如果没有使用nonatomic去修饰property,那么生成的getter会在每一次执行时都会retain一下对象,然后再autorelease,如果声明了的话,那么就直接get就ok了,这就避免了额外的开销。
 
#注意,如果不实用GC,在用assign、copy和retain时必须显示声明,不然会有警告。
 
 

posted on 2013-02-21 15:53  wacao  阅读(243)  评论(0编辑  收藏  举报

导航