我有一个对象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)已经被释放了吗? Person 如何知道他的委托(delegate)已释放?
最佳答案
您的委托(delegate)属性未设置为保留,因此一旦您执行[theDelegate release];
通常,委托(delegate)设置为分配以避免循环引用。但在这种情况下,委托(delegate)本身通常已经保留了对其委托(delegate)对象的引用。
即。
Person *newPerson = [[Person alloc] init];
[self.people addObject:newPerson];
newPerson.delegate = self;
[newPerson release];
因此,self.people
保留了所有创建的person
,并且这些person
都指向self
> 作为他们的委托(delegate)
关于objective-c - Objective C - dealloc 委托(delegate)上的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786328/