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