[英]Weird inheritance bug iOS
好的,所以我決定將我的UITableView委托的代碼移到另一個類中。 一個子類(如果可以的話),一個子類,以便可以更輕松地訪問Cellforrowwithindexpath函數在所述子類中執行的所有元素。
但是現在有一個小問題...
就UItableView而言,它工作正常,但是當我嘗試使用導航控制器將視圖推到頂部時,它不起作用,然后我發現self ...在我的主類中實際上是一個實例我的子類 ...什么? 所以自我實際上並不等於自我...
誰能給我任何關於我在這里做錯了什么的見解?
編輯 :所以我將其更改為代理的子類,並且可以正常工作,以防萬一其他人遇到此問題,但是我仍然對為什么它首先發生感到困惑...
碼:
@interface OpenGameList : MainMenuViewContoller <UITableViewDelegate,UITableViewDataSource>
{
}
@end
在我的MainMenuViewController的viewDidLoad函數中
_openGameList = [[OpenGameList alloc] init];
_openGameList.delegate = self;
friendsTable.delegate = _openGameList;
friendsTable.dataSource = _openGameList;
而且在那之后似乎在MainMenuViewController中對self的任何使用都等同於OpenGameList,因此,為什么要使用[[fromView navigationController] pushViewController:toView animated:NO];
不起作用
self
始終指向實際實例化的對象-最派生的類。
當您有一個子類的實例,並將消息發送給self
,如果存在子類的實現,則將始終調用該實現。 無論您是在超類的實現文件中還是在子類的實現文件中,都無關緊要。
這對於多態性至關重要:這是允許子類覆蓋父類行為的原因。 以-[UIView drawRect:]
為例。 要調用子類的繪圖代碼,當UIView
代碼調用[self drawRect:]
時,需要調用子類的繪圖實現。
可能要記住,超類和子類不是父對象和子對象,而是越來越少的適用於同一對象的特定類型。 UITableView
也是UIScrollView
, UIView
和NSObject
,但是當您創建一個對象時,就會有一個包含所有這些對象的對象,而self
始終引用該對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.