簡體   English   中英

iOS方法有弱有強

[英]iOS method with weak versus strong

我一直在閱讀有關使用ARC時的強項和弱項的信息。 現在,我認為與屬性相比,我的理解要好一些。

但是我剛剛讀到我可以在方法中使用__weak和__strong。 但我不確定是否能完全理解。 我的用法是:

- (void)someMethod{
   __weak NSString *text = [self.textField text];
   etc...
}

在上面的示例中,我使用了弱勢,因為否則它將是標准強勢,並且我不需要對它進行強力指示(我認為)。 因為文本字段本身會保留嗎?

我的問題是我是否理解此概念,使用__weak而不是默認__strong甚至還有優勢嗎?

是的,默認情況下, text將是強引用,只要引用仍處於活動狀態,對象( self.textField text )將保持活動狀態。 但是,使用__weak引用時,對象的壽命由self.textField確定。

但是,聲明__weak NSString *text (在此特殊情況下至少)沒有實際的內存優勢。 因此,我建議您采用默認行為( 不要將文本聲明為__weak

NSString *text = [self.textField text];

通常,建議使用__weak以避免循環引用,例如delegate

@property (nonatomic, weak) id delegate;

您只需要在特殊情況下使用它。 在像這樣的普通方法中,您可以只使用NSString *text

該指針將很強大,但這不是問題,因為如果沒有使用它,它將在方法結束時銷毀

將其聲明為微弱的風險是,當您嘗試訪問它時,對象的文本可能為零。 “弱”在這里的意思是:如果不存在引用“文本”的“強”對象,則一旦“ someMethod”完成執行,“文本”將被刪除。

暫無
暫無

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

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