先看一段demo的代码,这个一个好友列表部分代码,设置每个session的头标题为button
//设置组的头视图
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIButton * button = [UIButton buttonWithType:UIButtonTypeSystem];
button.backgroundColor = [UIColor cyanColor];
[button setTitle:[NSString stringWithFormat:@"第%ld组",section] forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonAC:) forControlEvents:UIControlEventTouchUpInside];
button.tag = section;
return button;
}
刚开始看到这里我有点不理解,最后button出了这个方法不就会被释放了么?
在c语言中局部变量出了作用范围肯定会被释放,那么oc对象什么时候会被释放呢?
在ARC中,该对象如果没有强指针指向必然会被释放,非ARC中,对象的引用计数器为0,会被释放,ARC我的理解,只有强指针,和创建的时候,会使引用计数器加一,所以button刚开始创建,以及出了作用范围相抵消,出了这个方法后我可以通过触发button调用buttonAC:方法,所以button没有释放,那么肯定有东西强引用它,看来是这个代理方法的头视图强引用他了,第二个猜测,这里return函数底层实现了拷贝一份button对象,因为在c中局部变量返回的时候经常会被拷贝。
详见下面博客
http://www.cnblogs.com/edwardcmh/archive/2012/03/20/2408359.html
那么这里的对象是拷贝的呢?还是引用的呢?拷贝是深拷贝了?
网友评论