从委托访问对象的属性

时间:2009-10-05 15:55:38

标签: iphone delegates

我一直在探讨一个没有意义的问题。说我的项目中有以下内容:

的AppDelegate MyClassA MyClassB MyViewController

在MyClassA中,有一个名为classB的MyClassB类型的属性。 MyClassB通过指针名称myArray具有类型为NSMutableArray的属性。

当在viewDidLoad下的 MyViewController 中时,我实例化MyClassA以访问其MyClassA属性中的myArray,如下所示:

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 current objective-c” - 只有一行它

这是一个我无法想象的奇怪行为。访问在委托中实例化的对象和在函数中本地访问对象(在ViewController的viewDidLoad中,如示例中)之间是否有区别?

非常感谢帮助= D

1 个答案:

答案 0 :(得分:1)

听起来您的应用程序因访问已释放的内存而崩溃。如果您希望进一步检查,我建议您将NSZombieEnabled环境变量设置为YES(在XCode的可执行设置中)。

在这种特定情况下,最好知道如何初始化委托的classA成员变量以及如何访问它。也许任何变量(无论是classA,classB还是myArray)都是自动释放的(或使用便捷方法创建)而不是保留。然后,您可以访问此成员变量,直到下次自动释放池耗尽为止。