簡體   English   中英

奇怪的繼承錯誤iOS

[英]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也是UIScrollViewUIViewNSObject ,但是當您創建一個對象時,就會一個包含所有這些對象的對象,而self始終引用該對象。

暫無
暫無

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

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