LINUX.ORG.RU

[Objective C] Управление памятью для геттеров/сеттеров


0

0

Если есть такой код:

UIView *parentView = someChildView.superview;
Свойство описано как
@property(nonatomic, readonly) UIView *superview
значит, никаких release с parentView я делать не должен?

Однако, свойство

@property(nonatomic, readonly, copy) NSArray *subviews
описано с модификатором copy.
NSArray *childViews = someView.subviews;
Должен ли я при выходе из функции, где childViews - локальная переменная, делать release для childViews?

Аналогичный вопрос для свойств с retain вместо copy и вообще без него:

@property(nonatomic, retain) UIFont *font

★★

> Должен ли я при выходе из функции, где childViews - локальная переменная, делать release для childViews?

Судя по документации retain/copy/assign влияют только на setter. В getter'е же неявных retain не делается никогда. Другими словами - release делать нельзя, если вы явно не использовали retain самостоятельно. По большому счёту в Cocoa всегда явно в документации указывают, если возвращаемому обьекту сделан [value retain] или [[value retain] autorelease].

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

По большому счёту в Cocoa всегда явно в документации указывают, если возвращаемому обьекту сделан [value retain] или [[value retain] autorelease]

А можете дать ссылки на документацию для таких случаев?

bk_ ★★
() автор топика

Любой вызов +(alloc), -(copy) или -(retain) должен быть замещен вызовом -(release) или -(autorelease).

Boy_from_Jungle ★★★★
()
Ответ на: комментарий от bk_

К примеру:

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Protocols/NSCopying_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSCopying/copyWithZone:

The returned object is implicitly retained by the sender, who is responsible for releasing it.

Вот другой пример, когда массиву кажется неявно сделан retain, но насколько я понимаю, ему же сделан autorelease, потому как обратное не указано явно:

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/arrayByAddingObject:

Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.