您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——OC语言加强---@property参数

2015-10-06 18:10 489 查看
                                                                       ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

@property参数
@propertyxcode4.4前
@property帮我们生成get和set方法的声明
 我们自己实现 get和set方法

或者
@property 和@synthesize联合
@propertyxcode 4.4后

@property增强

@propertyint age;

1)生成一个_age

2)生成get和set方法的声明

3)生成 get和set方法的实现
@property (......)int age;
@property 参数(一)
格式:@property (参数1,参数2) 数据类型 方法名

参数类别
参数
说明
原子性
atomic
对属性加锁,多线程下安全,默认值
 
nonatomic
对属性不加锁,多线程下不安全,但是速度快
读写属性
readwrite
生成getter、setter,默认值
 
readonly
只生成getter方法
set方法处理
assign
直接赋值,默认值
 
retain
先release原来的值,在retain新值
 
copy
先release原来的值,再copy新值 
int _age;
@property (assign) int age;
-(void)setAge:(int)age{
   _age = age;

Car_car;
@property (retain) Car *car ;
-(void)setCar:(int)car{
   if(_car ! = car){
       [_car release];
       _car = [car retain]; }

1)内存管理相关参数

retain:对对象release旧值,retain新值(适用于OC对象类型)

assign:直接赋值(默认,适用于非oc对象类型) 

copy:release旧值,copy新值

验证assign如果作用在对象上,实际上就是直接赋值 
@property 参数(二) 
1)是否要生成set方法(若为只读属性,则不生成)
readonly:只读,只会生成getter的声明和实现
readwrite:默认的,同时生成setter和getter的声明和实现 
2)多线程管理(苹果在一定程度上屏蔽了多线程操作)
nonatomic:高性能,一般使用这个
atomic:低性能,默认 
3)set和get方法的名称

修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter。
@property(nonatomic,assign, setter=abc:,getter=haha)int age
可以理解为把[p setAge:]------>[p abc:], [p age] --------->[p haha]; 
@property(nonatomic,assign, setter=setVip:,getter=isVip) BOOL vip;
<span style="font-size:14px;">#import <Foundation/Foundation.h>
@interface Dog : NSObject
@property (nonatomic,assign,readonly) int tuiNum;
@end
@implementation Dog
@end
@interface Person : NSObject
@property (nonatomic,assign,setter=isVip:,getter=isVip) BOOL vip;  //_vip
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *d = [Dog new];
// d.tuiNum ----> [d setTuiNum:4];
//        d.tuiNum = 4;  //调用set方法
NSLog(@"tuiNum = %d",d.tuiNum);  //调用get方法
Person *p = [Person new];
[p isVip:YES];
if (p.isVip) {
NSLog(@"这时VIP客户");
}
}
return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息