当前位置:  开发笔记 > 编程语言 > 正文

强与弱 - 如何定义可能或可能不与IBOutlet连接的属性?

如何解决《强与弱-如何定义可能或可能不与IBOutlet连接的属性?》经验,为你挑选了1个好方法。

我正在编写一个可重用的类,它具有UITableView属性作为IBOutlet.但是,我希望该类创建一个UITableView,如果它没有连接到xib,因此是nil.如果我将它设置为弱,那么以编程方式分配UITableView似乎不起作用.但是,如果我强大,那么如果使用xib,它将不一定正确解除分配.处理这种情况的最佳方法是什么?



1> danh..:

当作者理解其他人保留该对象时,通常会将属性声明为弱.一个很好的例子是一个视图控制器,它想要保持指向其主视图的子视图的指针.主视图的子视图集合是一个数组,并且数组保留其元素(对于子子视图,依此类推).

因此,无论是否通过IBOutlet设置,您的表视图都被声明为弱是正确的.但是初始化弱指针需要一些体操,这样你就可以在对弱属性进行赋值之前首先建立与对象的保留关系.

展示:

// assumes
@property(weak, nonatomic) IBOutlet UITableView *tableView;

- (void)viewDidLoad {
    [super viewDidLoad];

    if (!self.tableView) {  // if the outlet was not setup in IB
        // declare a stack variable that will be retained within the scope of this condition
        UITableView *tableView = [[UITableView alloc] init];
        // do whatever is needed to configure the tableView pointed to by this stack variable

        // this is key, make it a subview (establishing a retained relationship with subviews) first
        [self.view addSubview:tableView];
        // now we can assign it to our weak property
        self.tableView = tableView;
    }
}

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有