Действия 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 в качестве метода экземпляра, но затем проигнорировали экземпляр и вернули новый экземпляр.

Память о последствиях этого сбивает с толку и трудно понять.

Другие вопросы по тегам