亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Object-C中創建抽象類

在Object-C中創建抽象類

阿波羅的戰車 2019-07-12 15:55:00
在Object-C中創建抽象類我最初是一個Java程序員,現在正在使用Object-C。我想創建一個抽象類,但在Object-C中這似乎是不可能的。這個是可能的嗎?如果不是,我在目標C中離抽象類有多近?
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

通常情況下,Object-C類只是按照約定抽象的-如果作者將類文檔作為抽象類,就不要在沒有子類的情況下使用它。但是,沒有任何編譯時強制執行可以阻止抽象類的實例化.事實上,沒有什么可以阻止用戶通過類別(即在運行時)提供抽象方法的實現。您可以通過在抽象類中的方法實現中引發異常,強制用戶至少重寫某些方法:

[NSException raise:NSInternalInconsistencyException 
            format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];

如果您的方法返回一個值,則使用起來更容易一些

@throw [NSException exceptionWithName:NSInternalInconsistencyException
                               reason:[NSString stringWithFormat:@"You must override %@ in a subclass", 
                               NSStringFromSelector(_cmd)]
                             userInfo:nil];

因此,您不需要從方法中添加返回語句。

如果抽象類實際上是一個接口(即沒有具體的方法實現),那么使用Object-C協議是更合適的選擇。


查看完整回答
反對 回復 2019-07-12
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

不,無法在Object-C中創建抽象類。

您可以模擬一個抽象類-通過使方法/選擇器調用doNotRecognizeSelector:從而引發一個異常,使該類不可用。

例如:

- (id)someMethod:(SomeObject*)blah{
     [self doesNotRecognizeSelector:_cmd];
     return nil;}

您也可以為init這樣做。


查看完整回答
反對 回復 2019-07-12
  • 3 回答
  • 0 關注
  • 776 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號