【发布时间】:2016-03-06 16:08:40
【问题描述】:
这一直困扰着我一上午,我已经在这个网站上搜索了地狱,我找不到任何关于这个问题的参考。
在我的项目中,我有 2 个具有循环依赖关系的对象,就像这样设置的;
ClassA.h
@class ClassB;
@interface ClassA : NSObject {
ClassB *foo;
}
@end
ClassA.m
#import "ClassB.h"
@implementation ClassA
// Whatever goes here
@end
ClassB.h
@class ClassA;
@interface ClassB : NSObject {
ClassA *foo;
}
@end
ClassB.m
#import "ClassA.h"
@implementation ClassB
// Whatever goes here
@end
(信用 - Does Objective-C allow circular dependencies?)
我已经在几个项目中使用了这种技术,到目前为止它工作得非常好,每个对象都能够完美地访问彼此的属性。
几天前,我在 ClassA 中添加了一些方法,并尝试从 ClassB 调用它们,这再次完全正常......所以我想,问题是我一直在使用各种操作系统版本的 iPhone 上进行测试在他们身上,但他们都是iPhone5S及以上。今天我在 iPad2 模拟器上运行了这个项目,运行 SOME OF 方法时它崩溃了,iPhone4S 和 iPhone5 模拟器也是如此。
例如,我在 ClassA 中的方法只是简单的设置器;
-(void)setHomeButtonPageContents:(NSString*)contents Index:(int)index
{
homeButtonPageContents[index]=contents;
}
它们都是上述的变体,一些设置颜色一些设置字体,但在较旧的设备(iPad2、iPhone4S 和 iPhone5)上有些工作有些不工作。
有什么想法吗?!?!
【问题讨论】:
-
堆栈跟踪是什么?它在哪里崩溃? homeButtonPageContents 是如何定义的?您是否有任何限定符(弱、强等)或属性或实例变量?一切都在同一个线程上运行吗?你没有给我们太多的工作......
-
是的,一切都在同一个踏板上运行。 NSString *homeButtonPageContents[9]; - 这是在 ClassA 中定义的实例变量,当从 ClassA 调用原始线程中的方法时会发生崩溃。这在 64 位设备上运行良好,但任何更低的设备都行不通
-
NSString *homeButtonPageContents[9]?这是 Objective-C 中非常不寻常的模式,老实说,我不确定它是否真的得到正确支持,尤其是 ARC。它也不提供任何范围检查(你自己也没有检查)。使用NSMutableArray。并检查您的索引值,实际的错误可能在其他地方......
标签: ios xcode inheritance exc-bad-access circular-dependency