ios - Delegates - retain or assign - release? -
i've seen number of posts related delegates, , know proper way reference them. suppose have object declared like:
@interface myviewcontroller : uitableviewcontroller { id delegate; } @property (nonatomic, retain) id delegate; @end
through lifecycle of myviewcontroller
, make calls methods of delegate in response interaction user.
when it's time rid of instance of myviewcontroller
, delegate
ivar need release
'ed in implementation's dealloc
method since declared retain
?
or conversely, should delegate
retained? perhaps should @property (nonatomic, assign) id delegate
? according apple's docs:
retain ... typically use attribute scalar types such nsinteger , cgrect, or (in reference-counted environment) objects don’t own such delegates.
normally i'd go docs say, i've seen lot of code calls retain
on delegate. "bad code?" defer experts here... proper way handle this?
you want assign delegates rather retain them, in order avoid circular retain counts object retains object b , object b retains object a. (you might see referred keeping "weak reference" delegate.) example, consider following common pattern:
-(void)somemethod { self.utilityobject = [[[bar alloc] init] autorelease]; self.utilityobject.delegate = self; [self.utilityobject dosomework]; }
if utilityobject
, delegate
properties both declared using retain
, self
retains self.utilityobject
, self.utilityobject
retains self
.
see why objective-c delegates given property assign instead of retain? more on this.
if assign delegate rather retaining don't need worry releasing in dealloc.
Comments
Post a Comment