簡體   English   中英

ARC和非ARC NSString初始化

[英]ARC and Non-ARC NSString Initialization

最近,我一直在Objective-C / iOS程序中使用自動引用計數,並且真的很喜歡這個功能。

我不明白的一件事是初始化NSString的正確方法。 我已經看到這種方法與ARC和非ARC項目一起使用:

NSString *myClassicString = [[NSString alloc] initWithFormat:@"My great non-ARC string!"];

我還發現以下方法可用於初始化ARC中的NSString ,我更喜歡它,因為它的方便性:

NSString *myARCString = [NSString stringWithFormat:@"My new simple initialization string!"];

這兩者有什么區別嗎? 有沒有正確的方法? 兩個更好嗎?

在ARC之前,兩種方法之間存在顯着差異。 第一個是alloc init方法,它產生了一個由調用者擁有的對象 - 它必須手動釋放,否則就會出現內存泄漏。 另一個是+stringWithFormat:是一種方便的方法,可以生成一個不需要顯式釋放的自動釋放對象。

使用ARC,這種差異仍然很大。 自動釋放的對象仍然堆積,因為自動釋放池只在運行循環的每個循環中耗盡,即使使用ARC,所以如果你有一個循環創建了大量自動釋放的對象(即它們使用NSString方便方法或其他),你的峰值內存足跡可能上升。 出於這個原因,使用-alloc -init版本更好。 過去,與ARC的差別很小。

這個答案很好地解釋了自動釋放池在這里發生了什么,Jon談到的概念仍然適用於ARC代碼,因為ARC沒有擺脫-retain-release-autorelease ,它只是插入那些你的內存管理代碼。

總而言之,您可能不需要擔心創建字符串的兩種方法之間的區別。 無論哪種感覺更好,並使更簡潔,易讀的代碼將是更好的方法。

要么就好了。 如果您手動管理內存,則會對它們進行不同的處理,但如果您使用ARC,則無關緊要。

兩種方法都是一樣的。 NSString初始化方面,沒有比另一個好的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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