2011-05-25 118 views
1

我會說我知道Objective C很好。但是我只是追蹤了一個很奇怪的bug。 我有一個「int模式;」成員變量在類中。而只是寫「模式」在init方法中改變了類的行爲(它後來沒有得到處理) 即使編譯器給我的警告「Statement has no effect」非常奇怪的目標C錯誤

發生了什麼事? 我能否確定何時處理對象?

這是我在一個稍微詳細代碼:

@interface HelpScene : CCScene { 
    int mode; 
} 

,並在實施

- (id) init { 
    if (self=[super init]) { 
     [[SomeObject alloc] initWithBlock:^(id sender) { 
      mode; // CHANGES BEHAVIOUR 
      [Call CCDirector.replaceScene which usually ends up deallocing self 
      (the current scene). But not with the previous line anymore] 
     } 
    } 
    return self; 
} 

回答

8

mode參考簡寫爲self->mode,誘導塊保留類實例。

+0

使用塊,垃圾收集,多種方法來調用方法(self.running和[self running])Objective-C變得越來越複雜。太複雜。在某些時候,當系統變得足夠複雜時,我們將大腦的力量用於語言的語法,而不是創建。 – 2011-05-25 23:34:13

+0

現貨!謝謝。我不知道塊可能會這樣棘手。我用選擇器機制替換它,現在它工作正常。 – vlad2048 2011-05-25 23:35:16

+0

對不起 - 忘了在我的評論中指出馬塞洛的解決方案是簡潔和正確的。 – 2011-05-25 23:52:57