属性内存管理
2015-12-14 10:46 AB小博客 阅读(150) 评论(0) 收藏 举报1.assign 赋值不会引起计数的变化,弱引用,ARC中对象不能使用,但原始类型BOOL int float仍然可以使用
2.copy 拷贝,复制一个对象并创建strong关联,引用计数为1(+1),原来的引用计数不变
3.retain 持有,对原对象引用计数加1,强引用,ARC中使用strong
4.weak 赋值(ARC),比assign多了一个功能,对象释放后把指针设置为nil,避免野指针
5.strong 持有(ARC),等同于retain。
// // main.m #import <Foundation/Foundation.h> #import "Pet.h" #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [[Person alloc]init]; Pet *pet = [[Pet alloc]init]; [p setName:@"qq"]; [p setPet:pet]; [p setAge:32]; [p test]; [p release]; [pet release]; [pet release]; } return 0; }
// // Person.h #import <Foundation/Foundation.h> #import "Pet.h" @interface Person : NSObject { // @private // Pet *_pet; // NSString *_name; // int _age; } @property(nonatomic,retain)Pet *pet; 等同于下边两行 //-(void)setPet:(Pet*)myPet; //-(Pet*)pet; @property (nonatomic,copy)NSString *name; //-(void)setName:(NSString*)name; //-(NSString*)name; @property(nonatomic,assign)int age; //-(void)setAge:(int)age; //-(int)age; -(void)test; @end
// // Person.m #import "Person.h" @implementation Person //-(void)setPet:(Pet*)myPet{ // if (_pet!=myPet) { // [_pet release]; // _pet=[myPet retain]; // } // //} //-(Pet*)pet{ // return _pet; //} // //-(void)setName:(NSString*)name{ // if (_name!=name) { // [_name release]; // _name=[name retain]; // } //} //-(NSString*)name{ // return _name; //} // //-(void)setAge:(int)age{ // _age =age; //} //-(int)age{ // return _age; //} -(void)test{ NSLog(@"%@,%@,%d",_name,[_pet getName],_age); } @end
浙公网安备 33010602011771号