在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;

慕婉清6462132
TA貢獻1804條經驗 獲得超2個贊
weak
strong
UIViewController
在iOS 6之前,如果您保持到控制器視圖的子視圖的強鏈接,如果視圖控制器的主視圖被卸載,那么只要視圖控制器在附近,這些視圖就會保持子視圖。 從iOS 6開始,視圖不再被卸載,而是加載了一次,然后只要它們的控制器在那里,就會繼續運行。所以強大的屬性就不重要了。它們也不會創建強引用周期,因為它們指向強引用圖。
@property (nonatomic, weak) IBOutlet UIButton *button;
@property (nonatomic) IBOutlet UIButton *button;
使用 weak
清楚地說明控制器不想擁有按鈕的所有權。 但忽略了 weak
在iOS 6中,在沒有視圖卸載的情況下不會受到傷害,而且更短。有些人可能會指出,這也是更快,但我還沒有遇到一個應用程序太慢,因為 weak
IBOutlet
S. 不使用 weak
可能被視為錯誤。
- 3 回答
- 0 關注
- 481 瀏覽
添加回答
舉報
0/150
提交
取消