我一直在探讨一个没有意义的问题。说我的项目中有以下内容:
的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
答案 0 :(得分:1)
听起来您的应用程序因访问已释放的内存而崩溃。如果您希望进一步检查,我建议您将NSZombieEnabled
环境变量设置为YES
(在XCode的可执行设置中)。
在这种特定情况下,最好知道如何初始化委托的classA
成员变量以及如何访问它。也许任何变量(无论是classA,classB还是myArray)都是自动释放的(或使用便捷方法创建)而不是保留。然后,您可以访问此成员变量,直到下次自动释放池耗尽为止。