我更喜欢为我的所有视图控制器创建自定义视图。我通过对自定义视图使用弱引用来在代码中定义它,如下所示:
#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
这是否正确使用弱引用?应用程序是否会崩溃或泄漏,还是会出现其他问题?
答案 0 :(得分:3)
在这种情况下weak
没问题。您将CustomView
分配给self.view
标题中定义的UIViewController
@property(nonatomic,retain) UIView *view;
因此view
属性具有保留引用。
您的view
和customView
可能会失去同步 - 所以我很想将customView
定义为readonly
并将getter实现为< / p>
- (CustomView *)customView
{
return (id)self.view;
}
答案 1 :(得分:1)
正如您在documentation of UIViewController中看到的那样,视图控制器的视图属性具有对视图的强引用。因此,只要您不将view属性设置为其他内容,就会保留自定义视图对象。简而言之,您的方法有效。
答案 2 :(得分:0)
当您以编程方式从此控制器中创建实例时,应使用强引用将清除所有权设置为此控制器。
如果分别在IB或soryboard中创建视图对象,则对相关IBOutlet
的弱引用会起作用。