![](/img/trans.png)
[英]Google Map SDK unreasonable amount of memory used when using markers
[英]Does Using Assign reduce the amount of memory used?
當我在聲明綜合屬性時使用assign
時,ARC是否仍會自動為其創建匹配的ivar? 我的財產如下
@property (nonatomic, assign) NSString *text:
和
- (NSString *)text {
return self.label.text; // label is a UILabel
}
- (void)setText:(NSString *)text {
self.label.text = text;
}
我從來沒有用過自動生成的_text
ivar; 我忽略@synthesize text = _text
時,編譯器是否仍會創建此ivar,還是未使用的ivar持久存在於未使用的內存中?
不要以這種方式使用assign
。 在這種特定情況下,這可能無關緊要,但是這對調用者來說非常令人困惑,如果您更改實現,它會生成非常糟糕的錯誤。
實現getter和setter的事實意味着編譯器不會生成ivar。 這與您使用的內存管理屬性無關。 在這里使用strong
,因為這就是您實現的。 您的標頭應與您的實現相匹配。
僅當您尚未實現屬性時,才會自動為您創建ivar。 @synthesize text = _text;
除非您提供自己的getter和setter實現或將屬性合成為其他變量,否則此操作將自動完成。 例如:
@synthesize text;
上面將合成text
屬性為text
變量。
至於使用assign
而不是copy,理論上將使用較少的內存,但同時很危險。 如果使用可變字符串,則在將字符串值分配給屬性后更改該字符串值時,該屬性值也會更改,這在大多數情況下不是您想要的。
您是否擔心每個實例有4-8(32/64位指針)個字節的額外分配? 使用assign,weak或strong強勢將不會更改內存占用量。 無論您使用什么字符串都不會被復制,引用總是指向相同的實例。 區別只是assig,weak不會增加對象的引用計數,因此通過省略ivar,您僅可以“保存” 4-8字節,具體取決於所使用的體系結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.