In View Controller.m
@interface ViewController ()
{
CustomView *view;
}
@implementation ViewController
-(void)viewDidLoad {
[super viewDidLoad];
view = nil;
view = [[CustomView alloc]init];
[self.view addSubview:view];
}
在自定义视图中
-(CustomView *)init
{
CustomView *result = nil;
result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
return result;
}
我的自定义视图中有两个按钮。我的自定义视图按预期加载正常,但如果为 CustomView.m 文件启用 ARC,则按钮操作不会触发,如果我禁用 ARC,则按钮操作正在触发......
我哪里出错了..
这是加载uiview笔尖的正确方法吗(我想在我的项目中的许多地方使用它..)
谢谢。。
这是一个非常混乱/混乱的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 方法实现为实例方法但随后忽略该实例并返回新实例的方式。
其记忆含义令人困惑且难以解决。