美文网首页
返回局部变量的值

返回局部变量的值

作者: YuWenHaiBo | 来源:发表于2016-06-22 23:19 被阅读18次

    先看一段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
    那么这里的对象是拷贝的呢?还是引用的呢?拷贝是深拷贝了?

    相关文章

      网友评论

          本文标题:返回局部变量的值

          本文链接:https://www.haomeiwen.com/subject/zoendttx.html