亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在ARC下IBOutlet是強還是弱?

在ARC下IBOutlet是強還是弱?

iOS
眼眸繁星 2019-06-18 13:29:51
在ARC下IBOutlet是強還是弱?我是專為iOS 5開發使用ARC。應IBOutletS到UIViewS(及子類)為strong或weak?以下內容如下:@property (nonatomic, weak) IBOutlet UIButton *button;就能擺脫這一切:- (void)viewDidUnload{     // ...     self.button = nil;     // ...}這樣做有什么問題嗎?模板正在使用strong與從“InterfaceBuilder”編輯器直接連接到標頭時自動生成的屬性一樣,但為什么?這個UIViewController已經有一個strong提及其view保留它的子視圖。
查看完整描述

3 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

摘要開發者庫:

從實際角度來看,在IOS和OSX中,應將出口定義為已聲明的屬性。插座通常應該是弱的,除了那些從文件的所有者到頂級對象在一個nib文件(或者,在IOS中,一個故事板場景),應該是強大的。因此,默認情況下,您創建的出口通常是弱的,因為:

  • 例如,您創建的到視圖控制器視圖或窗口控制器窗口的子視圖的出口,是不暗示所有權的對象之間的任意引用。

  • 強出口通常由框架類指定(例如,UIViewController的視圖出口或NSWindowController的窗口出口)。

    @property (weak) IBOutlet MyView *viewContainerSubview;@property (strong) IBOutlet MyOtherClass *topLevelObject;


查看完整回答
反對 回復 2019-06-18
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

而文檔建議使用weak關于子視圖的屬性,因為IOS 6似乎可以使用strong(默認的所有權限定符)。這是由UIViewController視圖不再卸載。

  • 在iOS 6之前,如果您保持到控制器視圖的子視圖的強鏈接,如果視圖控制器的主視圖被卸載,那么只要視圖控制器在附近,這些視圖就會保持子視圖。
  • 從iOS 6開始,視圖不再被卸載,而是加載了一次,然后只要它們的控制器在那里,就會繼續運行。所以強大的屬性就不重要了。它們也不會創建強引用周期,因為它們指向強引用圖。

話雖如此,我在使用

@property (nonatomic, weak) IBOutlet UIButton *button;

@property (nonatomic) IBOutlet UIButton *button;

在IOS 6及以后:

  • 使用weak清楚地說明控制器不想擁有按鈕的所有權。

  • 但忽略了weak在iOS 6中,在沒有視圖卸載的情況下不會受到傷害,而且更短。有些人可能會指出,這也是更快,但我還沒有遇到一個應用程序太慢,因為weak IBOutletS.

  • 不使用weak可能被視為錯誤。

底線:從iOS 6開始,只要我們不使用視圖卸載,我們就不會再犯這個錯誤了。該開派對了。;)


查看完整回答
反對 回復 2019-06-18
  • 3 回答
  • 0 關注
  • 481 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號