Действия Uibutton не запускаются в режиме ARC, когда они запускаются в режиме не ARC
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.m
-(CustomView *)init
{
CustomView *result = nil;
result = [[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil] objectAtIndex:0];
return result;
}
У меня есть две кнопки в моем собственном представлении. Мое пользовательское представление было загружено нормально, как и ожидалось, но действия кнопок не выполнялись, если включить ARC для файла CustomView.m, если я отключил ARC, то запускаются действия кнопок…
Где я иду не так..
Это правильный способ загрузки пера uiview (который я хочу использовать во многих местах в моем проекте..)
Спасибо..
1 ответ
Это очень запутанная / запутанная реализация 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 в качестве метода экземпляра, но затем проигнорировали экземпляр и вернули новый экземпляр.
Память о последствиях этого сбивает с толку и трудно понять.