1:分類和擴充套件的區別
<1>分類:宣告的時候使用格式中括號必須要有分類名稱,建立完成後有兩個資料夾(person+action.h person+action.m檔案)
@inte***ce 類名 (分類名稱)
/* 方法宣告
*/@end
@implementation 類名(分類名稱)
/* 方法實現
*/@end
擴充套件:宣告的時候使用格式中括號沒有東西,建立完成後只有person_action方法
inte***ce person ()
/*方法宣告或者成員變數
*/@end
<2>:分類只能擴充方法,不能擴充套件屬性和成員變數;
如果分類中宣告了乙個屬性,那麼分類只會生成這個屬性的set、get方法宣告,也就是不會有實現,所以如果使用該屬性,程式將會崩潰
擴充套件中宣告的方法和成員變數是私有的,只有在擴充套件類中能呼叫,外部的類無法呼叫
例如:在分類中設定成員變數:
#import "person.h"
@inte***ce person (action)
@property(copy,nonatomic)nsstring *testcategory;
@end
在類別中設定成員變數:
#import "person.h"
@inte***ce person ()//注意括號中沒有類名稱,這是與分類category的不同之處
//為person類新增成員變數
@property(copy,nonatomic)nsstring *testextension;
@end
在person類中初始化方法中給兩個成員變數賦值,執行,顯示程式崩潰:
從程式崩潰的原因可以知道分類是不能宣告成員變數,設定屬性的;
2:分類和繼承的區別
<1>分類增加的這些方法會成為類型別的一部分;
繼承增加的方法不會成為父類的一部分
<2>分類增加的方法如果與類的方法同名,會覆蓋原類的方法,因為category的優先順序更高
繼承中子類也會覆蓋父類的方法
iOS 繼承 分類和類擴充套件
繼承是指乙個新類擁有被繼承類 父類 的全部屬性和方法。例如,只有繼承nsobject,才有建立物件的能力。nsobject是大部分類的基類 根類,root class 當a類繼承b類,a類就擁有b類中所有成員變數 屬性 和方法。這也是繼承的主要目的。使用場景 當我們可以說通b是乙個a時,就可以使用b...
IOS分類和擴充套件的解析及其區別
object c語言的動態性,不但體現在繼承和重寫上,還有乙個非常強大的功能就是分類和擴充套件,比如乙個類的方法不能滿足我現在的要求,而且我還不想修改原類的結構,這是分類就有很大的作用,有時我們想修改原來也不可能,不如系統提供的類,像nsstring,uiviewcontroller等,我們要是想給...
繼承和擴充套件
odoo 提供了三種不同的機制以模組化的方式來擴充套件模組 類繼承 class inheritance 用來新增功能 新類相容現有的檢視 儲存在同一張表中 原型繼承 prototype inhertiance 用於拷貝賦值功能 現有檢視忽略新類 儲存在不同的表中 委託繼承 delegation in...