UIViewController具有自定义视图和弱引用

时间:2013-04-23 15:36:59

标签: ios objective-c

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

#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

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

3 个答案:

答案 0 :(得分:3)

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

@property(nonatomic,retain) UIView *view;

因此view属性具有保留引用。

您的viewcustomView可能会失去同步 - 所以我很想将customView定义为readonly并将getter实现为< / p>

- (CustomView *)customView
{
  return (id)self.view;
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

当您以编程方式从此控制器中创建实例时,应使用强引用将清除所有权设置为此控制器。

如果分别在IB或soryboard中创建视图对象,则对相关IBOutlet的弱引用会起作用。