Hia的,
假设我有一对一或一对可能的关系。 让我们说Foo类对托管类Bar有一对一的引用。
Foo.h
Bar * bar;
@property (nonatomic, retain) Bar * bar;
Foo.m
@syntesize bar;
我会这样访问Foo:
Foo * myFoo= [fetched result what ever];
使用myFoo.bar.whatEverPoperty正在运行,但将myFoo.bar保存在类似Bar * myBar的内容中却没有。
知道为什么吗?
编辑:
SomeClass.h
Bar * myBarRef;
@property (nonatomic, retain) Bar * myBarRef;
SomeClass.m
@synthesize myBarRef;
现在我创建了该类的对象:
SomeClass * mySomeClass= [[SomeClass Alloc]init];
并将引用存储在那里: mySomeClass.myBarRef = myFoo.bar; (EXC_BAD_ACCESS)
偶尔他会突出显示这一行而不是上述内容:
@synthesize myBarRef; (EXC_BAD_ACCESS)
问题可能是延迟加载吗?如果是,如何用foo加载强制条?
答案 0 :(得分:1)
EXC_BAD_ACCESS表示您正在访问未初始化的内存;可能是一个被释放的对象。
如果mySomeClass.myBarRef = myFoo.bar;
行发生崩溃,则mySomeClass
或myFoo
未初始化或已发布。
您应该重新阅读memory management rules。
如果仍然找不到错误,请使用调试器。它会告诉你究竟哪种方法发生了错误的访问。
您可以(并且始终应该)switch on zombie support(将环境变量NSZombieEnabled
设置为YES
。