gpt4 book ai didi

objective-c - objective-c - dealloc 委托(delegate)上的调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:15:29 26 4
gpt4 key购买 nike

我有一个对象 Person和协议(protocol) PersonDelegate
Person有一个 @property (assign) id<PersonDelegate> delegate ;

我在代码中的某处:

Person *newPerson = [[Person alloc] init]; 
newPerson.delegate = theDelegate;
...
[theDelegate release]; // and dealloc

...

now Person has some new information for the delegate, so I call in Person
[self.delegate doSomething];

但是我得到了 EXC_BAD_ACCESS

这是因为委托(delegate)已经 dealloc 了吗? Person 如何知道他的委托(delegate)是 dealloc?

最佳答案

您的委托(delegate)属性未设置为保留,因此一旦您执行 [theDelegate release];

它就会变坏

通常委托(delegate)设置为赋值以避免循环引用。但在那种情况下,委托(delegate)本身通常已经保留了对其委托(delegate)对象的引用。

即。

Person *newPerson = [[Person alloc] init]; 
[self.people addObject:newPerson];
newPerson.delegate = self;
[newPerson release];

所以 self.people 保留了所有创建的 persons 并且这些 persons 都指向 self 作为他们的委托(delegate)

关于objective-c - objective-c - dealloc 委托(delegate)上的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com