从代表访问对象的属性
问题描述:
我一直在一个概念不太明白的概率上打破我的头。说我在我的项目如下:从代表访问对象的属性
的AppDelegate MyClassA MyClassB MyViewController
在MyClassA,有一个由名称CLASSB类型MyClassB的属性。 MyClassB通过指针名称myArray具有NSMutableArray类型的属性。
当viewDidLoad中下MyViewController我实例MyClassA访问myArray的在其(MyClassA的)MyClassB财产,如如下:
MyClassA *classA = [[MyClassA alloc] init];
NSLog([NSString stringWithFormat:@"%i", [[[classA classB] myArray] count]);
这将成功地显示在日志中的次数,并在同一时间,进一步访问数组的内容工作正常。
然而,仍然在MyViewController,当MyClassA被实例化并从委托访问如下:
AppDelegate *aDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog([NSString stringWithFormat:@"%i", [[[aDelegate classA] classB] myArray] count]]);
日志仍然会显示计数成功,但进一步访问的内容数组失败,显示没有错误,但“当前语言:auto当前目标-c” - 只是它的一行。
这是一个奇怪的行为,我无法确定。访问在委托中实例化的对象并在函数中本地访问对象(在ViewController的viewDidLoad中,如示例中)还是有所不同?
帮助是非常赞赏= d
答
这听起来像您的应用程序崩溃是由于访问已经被释放的内存。如果您想进一步检查,我建议您将NSZombieEnabled
环境变量设置为YES
(在XCode的可执行设置中)。
在这种特殊情况下,最好知道委托的classA
成员变量是如何初始化的以及它如何被访问。也许任何变量(无论是classA,classB还是myArray)都是自动发布的(或者使用便捷方法创建的),而不是保留。然后你可以访问这个成员变量,直到autorelease池下次被排空。
确保“主动配置”设置为“调试”,以便更好地检查中断点。 – Jordan 2009-10-05 17:19:39