0

在 View Controller.m 中

@interface ViewController ()
{
    CustomView *view;
}

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];

    view = nil;
    view = [[CustomView alloc]init];

    [self.view addSubview:view];
}

在 CustomView.m 中

-(CustomView *)init
{
    CustomView *result = nil;
    result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];

    return result;
}

我的自定义视图中有两个按钮。我的自定义视图已按预期正常加载,但如果为 CustomView.m 文件启用 ARC,则不会触发按钮操作,如果我禁用 ARC,则会触发按钮操作...</p>

我哪里错了。。

这是加载uiview笔尖的正确方法吗(我想在我的项目的许多地方使用它..)

谢谢 ..

4

1 回答 1

0

这是一个非常混乱/混乱的init方法实现。

- (CustomView *)init
{
    CustomView *result = nil;
    result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];

    return result;
}

我建议将其更改为这样的...

// class method not instance method
+ (CustomView *)loadFromNib {
    return [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
}

然后将您的ViewController方法更改为这样的...

@interface ViewController ()

@property (nonatomic, strong) CustomView *customView; // don't call it view, it's confusing

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];

    self.customView = [CustomView loadFromNib];

    [self.view addSubview:self.customView];
}

您遇到的问题可能来自您将 init 方法实现为实例方法但随后忽略该实例并返回一个新实例的方式。

这对记忆的影响令人困惑且难以解决。

于 2016-01-21T10:44:01.600 回答