簡體   English   中英

使用分配會減少使用的內存量嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM