如果已经在目标C中释放了目标代码,如何阻止它们执行

时间:2013-07-30 12:38:40

标签: objective-c cocoa-touch cocoa

我有2个班,classA和classB。

ObjectA具有ObjectB的属性。现在的情况是 -

  1. ObjectA调用ObjectB方法 - [ObjectB methodB1]。
  2. 执行方法[ObjectB methodB1]后,objectB将回调发送给objectA。
  3. 获取回调ObjectA释放ObjectB。按照以下方式做到了 -

    [ObjectB发布]; ObjectB = nil;

  4. ObjectB有另一种方法 - > methodB2,它在向objectA发送回调之后立即开始执行[ObjectB methodB2]并且因为ObjectA在执行时释放了ObjectB而崩溃,所以没有对象然后是ObjectB。
  5. 那么如果如何解决这个问题?

    感谢您的回答。

4 个答案:

答案 0 :(得分:2)

在[ObjectB methodB2]执行后立即将回调移动到ObjectA。 或者创建两个回调:一个在[ObjectB methodB1]之后,另一个在[ObjectB methodB2]之后,在第二个回调之后释放ObjectB

答案 1 :(得分:0)

ObjectB.ObjectA = nil;
[ObjectB release];
ObjectB = nil;

答案 2 :(得分:0)

methodB1在启动时应保留self,并在完成后将其释放。

答案 3 :(得分:0)

这里有两个场景:

1)当ObjectA调用两次

时,ObjectB可以传递给它的不同属性

2)对象B只传递一组属性,而对象A需要运行Bethod B1和B2,而ObjectB保留相同的属性。

3)如果对象B需要传递给它的新参数,请使用getter和setter吗?

情景1:

ObjectA.m:

    ...
     ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
     NSString *callback1 = [objectB methodB1];
    // why release when you can repoint?
     ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"another parameter"];
     NSString *callback2 = [objectB methodB2];
    [objectB release];

情景2:

ObjectA.m:

    ...
     ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
     NSString *callback1 = [objectB methodB1];
     NSString *callback2 = [objectB methodB2];
    [objectB release];

情景3:

ObjectA.m:

    ...
     ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
     NSString *callback1 = [objectB methodB1];
    [objectB setSomeParameter:@"another parameter"];
     NSString *callback2 = [objectB methodB2];
    [objectB release];

当你说ObjectB回电话?我希望你的意思不是:

ObjectA.m:

     ObjectB *objectB = [[ObjectB alloc] initWithSomeParameter:@"the parameter"];
     NSString *callback1 = [objectB methodB1];
     ...

ObjectB.m:

     ...
     //DO some work in method B1
     ObjectA *objectA [[ObjectA alloc] init];
     [objectA callback];

那是一个记忆导致在你身边逼近然后......如果这就是你的意思,那么我建议你阅读上面的场景或者查看NSNotificationCentre Notifications以获得跨对象通知,即回调。