Objective c 访问目标c中的数组

Objective c 访问目标c中的数组,objective-c,nsmutablearray,Objective C,Nsmutablearray,让我们想象一下这个场景: 游戏h: @interface Game : CCLayer { NSMutableArray* questions; } @property (nonatomic,retain) NSMutableArray* questions; - (void) didLoadFromCCB; - (void) pressitem:(id)sender; @end 游戏 @implementation Game @synthesize questi

让我们想象一下这个场景:

游戏h:

@interface Game : CCLayer
{    
    NSMutableArray* questions;
}

@property (nonatomic,retain) NSMutableArray* questions;


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

@end
游戏

 @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
我从CCB的didLoadFromCCB获取日志,但在pressitem上返回null。阵列不应该通过我的所有实现都可以访问吗

我知道这是一个很难回答的问题,但我有actionscript/php的背景,我刚刚订购了一本C和一本Objective C的书,但在我等待的时候,我只想深入了解一下


感谢您的时间:)

您在
didLoadFromCCB
中对
问题的本地声明会隐藏实例变量。你也许应该这样做:

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

然后,您将创建数组并在实例变量中存储指向它的指针,而不仅仅是创建一个立即超出范围的本地指针。

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

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

相反。

如果声明了属性,为什么不设置它呢?@Filip请看Chuck的解释。@Chuck我完全失去了对iOS程序员的希望,因此我不再假设有人使用MRC。@H2CO3老实说,我看不到任何新加入平台的人不使用ARC的好理由……但这个讨论可能最好在其他地方进行@lxt不以ARC开头的充分理由:任何新加入该平台的人都将1。使用所有的
\u桥接\u传输\u非恢复\u自动释放\u弱\u强\u半强
强制转换,然后2。他也不会学习手动管理内存,这是一门必修的知识,尤其是在嵌入式系统上。如果不使用ARC,这可能会导致内存泄漏,该属性会增加retain count+1以及alloc指令。因此,您以一个Retain计数为2的对象结束,并且在dealloc方法中可能只会释放一个对象。@PaulN我知道。(你真的以为我不知道吗?)但除了我,似乎没有人再使用MRC了。太糟糕了。谢谢你们两位=)事实上,self.questions有效,当我点击它时,它会记录数组,但之后它会使我的应用程序崩溃,我在使用它后需要某种dealoc吗?@RicardoCerqueira不,你需要一个小时来阅读enhearten basic Objective-C和苹果的内存管理指南。不,我以为你会知道这一点,因为你的54.2k声誉,但为像你和我这样仍在使用MRC的其他人添加了评论,他们可能会得出这个答案并复制你的代码。;)