@property在OC中,特别是Xcode环境编写中,随处可见。这源于它的参数非常丰富,因此功能也十分强大。下面我就他的参数做一个简单的示例。
1、生成相关的get和set方法参数:readwrite/readonly
在编程中,我们为了类的成员变量的安全性,不允许外界随便修改和访问,会经常把这些成员变量做个一个包装—名曰封装。在以前我们经常用这种方法来封装我们的成员变量,例如,
- - (void)setAge :(int)age
- {
- _age = age;
- }
- - (int)age
- {
- return age;
- }
但是,我们发现每一个成员变量都需要做上述的封装,但是他们的格式都一样,因此Xcode给我们提供了一个函数property。运用@property可以让Xcode自动生成set和get方法。常用格式:@property int age(生成声明);@synthesize age = _age(生成实现的)
在Xcode4.4以后@property int age包含了@synthesize age = _age功能。它能生成带下划线的成员变量和声明实现。但是它有以下特性:当没有成员变量时,它生成的成员变量就是一个private的变量;当我们自己写了set和get方法后他就不会给我们生成带下划线的成员变量;当我们只写了set或者get方法时,他会主动补齐另一种方法。
但是在实际编写中,我们并没有写property的参数,那是因为它默认的是readwrite,即@property(readwrite)int age;@property(readonly)int age就是只生成get方法不生成set方法,即只读。
新写法:
- @property int age;
2、内存管理的相关参数:retain/assign
在做内存管理的时候,我们之前一直是在set方法加入retain/release来计数对象,但是Xcode4.4以后他给我们提供了智能的内存管理,即使property自动生成对象的内存计数器。原来set的生成方法,如下:
- - (viod)setName :(NSString *)name
- {
- if(name != _name)
- {
- [self realease];
- _name = [name retain];
- }
- }
新用法如下:
- @property(retain)NSString *name;
3、set和get的方法名的改变:setter = ***/getter = ****
有时候我们想要改变set和get的方法名称的时候我们@property也提供一个参数来改名字,用法如下:
- @property(setter = setMyName,gtter =myName, retain)NSString *name;
4、Xcode 中ARC中的强弱指针:weak/strong
在ARC中一个对对象的指针的修饰的参数即,weak/strong。这weak/strong代表强弱指针,它们只有对OC对象才使用,因此能代替retain这个参数。一般情况下property默认为strong,即,@property(strong)(NSSTring *)name。在我们对那种相互引用,即发生循环时,我们给其中的一个定义为weak,弱指针。
用法:
- @property(strong)NSString *name;