续上一篇MRC内存管理(二)
- (void)dealloc{
[_p1 release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
//不是通过alloc/new/copy创建的对象,是autorelease的
_p1 = [self createPeopleWithName:@"张三" andAge:23];
//此时p1的引用计数虽然是1,但是代码结束之后就为0(不是稳定的,而凡是通过alloc,new,copy创建的对象,引用计数=1固定不变),p1如果是全局的需要继续使用则需要 [p1 retain];
//通过非alloc/new/copy创建的对象,是autorelease的。
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(20, 30, 200, 40);
button.backgroundColor = [UIColor greenColor];
[self.view addSubview:button];
[button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
}
- (void)buttonClick{
NSLog(@"%@",_p1);
}
- (People *)createPeopleWithName:(NSString *)name andAge:(NSInteger)age{
People *p = [[People alloc] init];
p.name = name;
p.age = age;
//autorelease自动释放,延迟release,代码走完之前不会release,在一次事件循环(待命状态——>事件执行(响应到结束)——>事件执行完毕待命状态)之后release
//[p release];如果release写在return上面,那么对象返回之前就会被释放。
//autorelease自动释放(延迟release,在代码走完之前不会release,事件循环结束后release)
[p autorelease];
return p;
//[p release];如果release写在return下面,代码不会被执行
}
//description方法返回值为对象NSLog输出时的内容,默认为内存地址。
- (NSString *)description{
return [NSString stringWithFormat:@"%@,%@,%lu",[super description],_name,(long)_age];
}