簡體   English   中英

iOS Viewcontroller參考表視圖IBOutlet-弱還是強?

[英]iOS Viewcontroller with reference to table view IBOutlet - Weak or Strong?

當我讀到另一個問題時,經驗法則是:

當父對象具有對子對象的引用時,應使用強引用。 當子對象對其父對象具有引用時,應使用弱引用或unsafe_unretained引用(如果前者不可用)。 典型的情況是與代表打交道。 例如,UITableViewDelegate不保留包含表視圖的控制器類。

好吧,在這種情況下,我有一個帶有表視圖IBOutlet的視圖控制器。 該表視圖還使用視圖控制器作為委托和數據源。 根據上面的規則,視圖控制器充當父級,因此我應該對表視圖有很強的引用-表視圖應該對視圖控制器有很弱的引用。

我不確定如何定義后者的弱引用-我正在設置

tableView.delegate = self;
tableView.dataSource = self;

我應該如何使自己虛弱? 還是這不是正確的方法?

您可以將出口從UITableView拖到.h文件中。 Xcode將為您創建適當的屬性。 您也可以在命名插座時從那里選擇弱/強類型。

但是,如果您想手動創建它,則可以將此行添加到.h文件中:

@property (weak, nonatomic) IBOutlet UITableView *tblView;

但是請記住,即使將此行添加到您的.h. 文件,您仍然必須將其連接到UITableView

同樣不要忘記使您的ViewController符合UITableViewDelegate如下所示:

@interface MyTableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

但是,在標題中,您似乎對弱屬性和強屬性之間的區別感到困惑。 Ole Begemann這個問題上出色地回答了分歧。

您編寫的代碼很好。 您不必使自己虛弱。 在UITableView 定義中 ,委托和數據源屬性聲明為弱。

根據UITableView.h, 委托數據源已經很弱。

@property (nonatomic, weak, nullable) id <UITableViewDataSource> dataSource;
@property (nonatomic, weak, nullable) id <UITableViewDelegate> delegate;

如果將任何實例設置為委托,並且tableview實例不會保留數據源

當您制作IBOutlet時,請使其如下。 如圖所示,如果默認情況下其強度為弱,則選擇弱

@property (weak, nonatomic) IBOutlet UITableView *tableview;

在此處輸入圖片說明

由於視圖已被視圖保留,因此添加了視圖(即self.view)

就像UIKit控件中的視圖以列表形式顯示數據一樣。 它不是子控制器。 所有UIKit項均被稱為弱項。

暫無
暫無

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

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