问题
Some Cocoa and Cocoa Touch classes declare their delegate properties as assign
rather than weak
, which forces users of the class to nil
out the property in dealloc
-(void)dealloc
{
self.imageScrollView.delegate = nil;
self.tableView.delegate = nil;
self.tableView.dataSource = nil;
}
Which is very cumbersome.
Why would Apple do it this way?
回答1:
The reason why is that not all system classes have been compiled with ARC.
You may implement a dealloc method if you need to manage resources other than releasing instance variables. You do not have to (indeed you cannot) release instance variables, but you may need to invoke [systemClassInstance setDelegate:nil] on system classes and other code that isn’t compiled using ARC.
See this page on developer.apple.com: Transitioning to ARC Release Notes
来源:https://stackoverflow.com/questions/20419317/why-does-apple-use-assign-rather-than-weak-to-store-a-delegate