本文主要是介绍setter和getter内存处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Person.m
#import "Person.h"@implementation Person
//析构函数
- (void)dealloc {//调用 任何之前不能写在[super dealloc];因为它已经把所有的都销毁的NSLog(@"Person dealloced.");//释放所有当前对象所持有的对象成员变量[_name release];[_score release];[super dealloc];
}
//构造函数
- (id)initWithName:(NSString *)name score:(NSArray *)score{self = [super init];if (self) {_name = name;_score = score;}return self;
}- (void)setName:(NSString *)name{//释放旧的对象release,持有新的对象retain//为了避免相同对象赋值之后造成的对象以外释放,需要判断对象是否相同if (_name != name) {[_name release];_name = [name retain];}/*[name retain];[_name release];_name = name;*/}
-(NSString *)name{return _name;
}
- (void)setScore:(NSArray *)score{if (_score != score) {[_score release];_score = [score retain];}}
- (NSArray *)score{return _score;
}
@end
main.m
/*Cocoa内存管理规则*//*5个堆:需要的时候分配内存,不需要的时候手动释放,编译器不负责释放该区域的内存空间栈:需要的时候分配内存,不需要的时候自动释放,编译器负责释放该区域的内存空间全局/静态存储区 :存储全局变量和静态变量常量存储区:存储常量,不可变的数据自由存储区:*///1.使用alloc ,new,copy,mutableCopy生成的对象,对象出事引用计数值为1,需要手动释放内存(堆上的对象);//2.非以上四个方法生成的对象(便利初始化)对象初始化引用计数值为1,并且设置为自动释放的,无需手动释放(栈上的对象);//3.使用retain持有的对象,需要保证retain和 release次数相等/*setter和getter内存处理*/Person *person = [[Person alloc]init];NSArray *score = [[NSArray alloc]initWithObjects:@"3", nil];NSLog(@"score =%lu",[score retainCount]);[person setScore:score];NSLog(@"score =%lu",[score retainCount]);[score release];//如果不release内存泄露NSLog(@"score = %lu",[score retainCount]);
这篇关于setter和getter内存处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!