UIView 用weak
NSstring 用copy
其他对象用strong
@property(getter = isRich,setter = setRich:)BOOL rich;//当属性是bool类型的时候我们一般需要指定生产的get和set方法,提高可读性,当然这里的set方法和默认的一致。
@property(assign,atomic,readonly) int age;//readonly代表只生产get方法,readwrite代表只生产set方法
@property(assign,atomic) int age;//这里的atomic代表这个属性是线程安全的,多个线程访问的时候会加锁,nonatomic代表不需要线程安全考虑,一般这个都用这个属性。不需要考虑线程安全。
@property(assign) int age;//assign表示按照普通的方法生产getset方法,不会像下面的内存管理一样生产set方法
@property(nonatomic,strong) Book * book;//nonatomic代表此对象不需要线程管理。
@property(retain,nonatomic) Book * book;//retain修饰oc对象的时候,会自动管理内存
retain修饰的时候set方法的时候会这么产生,当然retain是不会生产这样的dealloc,需要自己复写。
-(void)setBook:(Book *)book{
if(_book!=book){
[_book release];
_book=[book retain];
}
}
当然在完整的内存管理的时候,set进来的时候引用计数器+1,在这个类的dealloc方法里要release一次
-(void)dealloc{
//insert your code;
[_book release];
[super dealloc];
}
上面的setter方法和这个dealloc方法是配套的使用的内存管理
oc中所有在.h里面声明的方法都是公共方法。
当要声明一个私有方法的时候只要将这个方法放到.m文件里面即可,并且没有在.h里面没有声明。
oc中的成员变量一般都用"_"开始。
当我们要自定用oc的初始化方法的话
initWithAge:(int)age andNo:(int)no{
self=[self init]
if(self){
_age=age;
_no=no;
}
return self;
}
oc中有个方法和java的toString方法一样叫做description方法,复写即可(这个方法是来自NSObject的)原来只会打印内存地址,这里将其复写了下
-(NSString *)decription{
NSString * str =[NSString stringWithFormat:"ksdfhk%d",_age];
return str;
}
@synthesize age;//这个关键字在生成setter和getter方法的时候会在.h里面找那个同名的属性,如果找不到会自动造一个同名的
当如果我们要其访问的成员变量是_age的时候
我们可以这么写
@synthesize age=_age;//这个就是在指定访问的成员变量;有开发工具生产的属性都是私有的。
xcode4.5以后,只要你写了@property int age就会自动产生getter和setter的声明和实现,,,实现的时候还是自动访问_age这个属性(现在.h里面找),如果没有这个属性就会自动生产一个私有_age(
这里指的私有的就是在.m文件里面定义的)
所有从这里就可以看出私有的变量可以在.h里面定义然后用@private修饰,或者直接定义在.m文件里面
这里生产的都是标准的setter和getter方法,如果有其他需求必须自己实现其getter和setter方法。
oc中修饰成员变量的3中权限 @private @protected @public 但是@public好像没什么意义,要怎样用到这个@public呢 Student *stu=[[[Student alloc]init]autorelease]; stu->age=10; age是Student类的一个公共属性,所以可以像上面那样访问