属性内存管理
?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?
轉載于:https://www.cnblogs.com/WJR12/p/5044437.html
總結
- 上一篇: 大页内存(HugePages)
- 下一篇: LeetCode198——house r