0

我更喜欢为我的所有视图控制器创建自定义视图。我在代码中通过对自定义视图使用弱引用来定义它,如下所示:

#import "MyViewController.h"
#import "MyCustomView.h"

@interface MyViewController ()
@property (nonatomic, weak) MyCustomView *customView;
@end

@implementation MyViewController
- (void) loadView
{
    MyCustomView *view = [MyCustomView new];
    self.view = view;
    self.customView = view;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // work with custom view
    self.customView.tableView.delegate = self;
    ....
}

@end

这是弱引用的正确使用吗?应用程序会崩溃或泄漏,还是会出现其他问题?

4

3 回答 3

3

在这种情况下weak很好。您将CustomView标题中self.view定义为的分配给UIViewController

@property(nonatomic,retain) UIView *view;

因此该view属性具有保留参考。

您的viewandcustomView有可能不同步 - 所以我很想将 getter 定义customViewreadonly并将 getter 实现为

- (CustomView *)customView
{
  return (id)self.view;
}
于 2013-04-23T15:46:24.127 回答
1

正如您在UIViewController 的文档中看到的那样,视图控制器的视图属性对视图有很强的引用。因此,只要您不将视图属性设置为其他内容,自定义视图对象就会被保留。简而言之,您的方法有效。

于 2013-04-23T15:44:51.787 回答
0

当您以编程方式在此控制器中创建实例时,您应该使用强引用来清楚地设置此控制器的所有权。

如果您分别在 IB 或 soryboard 中创建视图对象,那么对相关对象的弱引用IBOutlet就可以了。

于 2013-04-23T15:40:56.753 回答