【发布时间】:2009-09-26 18:42:01
【问题描述】:
在基于导航的应用程序中,我在我的应用程序委托中初始化了一个数组,而不使用 self.在 RootViewController 的 cellForRowAtIndexPath: 中访问时,所有数组对象都在那里,我可以看到它是一个 NSCFArray。加载应用程序后,我单击一个表格单元格并在 didSelectRowAtIndexPath: 中,该数组的类型为 NSArray,没有对象,并且出现 EXC_BAD_ACCESS 错误。如果我在应用程序委托中将数组放在 self 之前,一切都很好。这是为什么呢?
以下是应用委托 .h 文件:
@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
NSMutableDictionary *aDict;
NSArray *aArray;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) NSArray *aArray;
@property (nonatomic, retain) NSArray *aDict
@end
数组和字典在 .m 文件中合成。我在应用程序委托 .m 文件中初始化数组,如下所示:
aArray = [self.aDict allKeys];
在两个根控制器方法中都是这样访问的:
theDelegate = [[UIApplication sharedApplication] delegate];
[theDelegate.aArray objectAtIndex:2];
只有当我到达 didSelectRowAtIndexPath: 时它才会失败。在应用程序委托中执行此操作会使一切正常:
self.aArray = [self.aDict allKeys];
我没有对 cellForRowAtIndexPath: 和 didSelectRowAtIndexPath: 之间的 myArray 做任何事情。为什么在第一种情况下会失败?
【问题讨论】:
标签: objective-c iphone xcode memory-management