2011-05-25 114 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