2013-02-27 61 views
0

让我们来想象这样的情景:访问目标C数组

Game.h:

@interface Game : CCLayer 
{  
    NSMutableArray* questions; 
} 

@property (nonatomic,retain) NSMutableArray* questions; 


- (void) didLoadFromCCB; 
- (void) pressitem:(id)sender; 

@end 

Game.m

@implementation Game 

@synthesize questions; 

- (void) didLoadFromCCB 
{ 
    NSMutableArray *questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil]; 

    NSLog(@"didload %@", questions); 
} 


- (void) pressitem:(id)sender 
{ 
    NSLog(@"pressitem %@",questions); 
} 
@end 

我从didLoadFromCCB但对pressitem得到它的日志返回null。不应该通过我的所有实现访问数组吗?

我知道这个接缝像一个真正的noob问题,但是我来自一个actionscript/php背景,而我只是订购了一个C和一本Objective C的书,但是当我等待时,我只是想挖一点。

感谢您的时间:)

回答

0

范围。 NSMutableArray *questions声明- didLoadFromCCB方法的局部变量。它不设置实例变量(具有较小范围的变量抑制具有相同名称但范围较宽的变量)。简单地写

self.questions = [[NSMutableArray alloc] initWithObject:[NSNumber numberWithInteger:-1]]; 

改为。

+0

如果您不使用ARC,这可能会导致内存泄漏,该属性会增加保留数+1以及alloc指令。因此,您以保留计数为2的对象结束,并且您可能只会在dealloc方法中释放一个对象。 – 2013-02-27 22:32:55

+0

@PaulN我知道。 (你真的以为我不知道?)但除了我之外,似乎没有人再使用MRC了。太糟糕了。 – 2013-02-27 22:36:38

+0

谢谢你们俩=)确实self.questions工作,当我点击它记录数组,但它后崩溃我的应用程序,在使用它之后,我需要某种dealoc? – 2013-02-27 22:37:10

2

你的questionsdidLoadFromCCB阴影的实例变量的局部声明。你或许应该只是使该行:

self.questions = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:-1],nil]; 

那么你将创建阵列和存储一个指向它的实例变量,而不是只建立一个本地指针马上超出范围。

+0

为什么不设置属性,如果它被声明? – 2013-02-27 22:30:14

+0

也可以。甚至可能是首选。我会编辑它。 – 2013-02-27 22:30:44

+0

完美,谢谢。 – 2013-02-27 22:31:38