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