Objective-C:块和ARC

时间:2014-12-16 13:47:08

标签: ios objective-c

我为UIAlerts创建了实用程序类。我正在使用块

用户应该创建的代码如下所示:

MyAlertMessage * a = [[MyAlertMessage alloc] initWithTitle:@"Hello" WithMessage:@"World"];

[a addButton:BUTTON_OK WithTitle:@"OK" WithAction:^(void *action) {
        NSLog(@"Button OK at index 0 click");
}];

[a addButton:BUTTON_CANCEL WithTitle:@"Cancel" WithAction:^(void *action) {
        NSLog(@"Button Cancel at index 1 click");
}];

[a show]

可在此处查看完整课程:https://github.com/MartinPerry/UIAlert

现在,如果我这样做,在[演出] ARC摧毁我的课程之后,所以格挡不再有效并且给我错误。我通过创建单独的类来解决这个问题,该类包含对创建的MyAlertMessage的引用(消息广告并从此管理器中销毁自己)。这是正确的解决方案还是应该做得更好,没有这个单身经理?

可在此处找到经理和相应的课程:https://github.com/MartinPerry/UIAlert/blob/master/UIAlert/MyAlertMessage.m

1 个答案:

答案 0 :(得分:1)

您发布的示例代码使用局部变量来创建MyAlertMessage对象。因为它是一个局部变量,所以一旦执行离开当前的大括号(方法,if语句,等等),它就会超出范围。一旦发生这种情况,没有人对该对象有强引用,因此它会被释放。

将MyAlertMessage变量设为实例变量,并在完成后将其设置为nil。