2013-07-30 26 views
-2

我有2個class,classA和classB。如果目標代碼已經釋放,如何停止目標代碼C

ObjectA有一個屬性ObjectB。現在場景是 -

  1. ObjectA調用ObjectB方法 - [ObjectB methodB1]。
  2. 執行方法[ObjectB methodB1]後,objectB將回調發送給objectA。
  3. 獲取回調ObjectA發佈ObjectB。是否按照以下方式執行 -

    [ObjectB release]; ObjectB = nil;

  4. ObjectB有另一個方法 - > methodB2,它在向objectA發送回調後立即開始執行[ObjectB methodB2],並且因爲ObjectA在執行時釋放了ObjectB,因此ObjectB沒有對象。

那麼如果要如何解決這個問題呢?

感謝您的回答。

+3

顯示實際代碼並給出例外的詳細信息(名稱,消息,堆棧跟蹤/位置)。 – Wain

回答

2

剛剛執行[ObjectB methodB2]後,將您的回調移動到ObjectA。 或者創建兩個回調:一個後[對象B methodB1]和另一個之後[對象B methodB2]和第二個回調

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

methodB1後釋放對象B應保留self它啓動時並釋放它,當它完成。

0

的兩個情景在這裏:當對象A的兩倍

2)對象B永遠只能通過一組屬性和對象A需要Bethod稱爲

1)對象B可能有傳遞給它不同的屬性B1和B2在ObjectB保持相同屬性時運行。

3)如果對象B需要傳遞給它的新參數,請使用getters和setters?

方案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]; 
    ... 

對象B。L:

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

這是一個記憶領先籠罩在你那裏,然後......如果這是你的意思,那麼我建議看我上面的場景的或看NSNotificationCentre通知交叉對象通知,即回調。