OC中類目,擴充套件,協議的介紹

2021-08-27 15:09:48 字數 3866 閱讀 9210

類目

類目(categroy):指向已知的類增加新的方法,不會破壞封裝性。

1;在類目中定義的方法會成為原始類的一部分,呼叫與其它方法相同。

2:在父類中新增類目子類會繼承該類目中的方法,但在子類中新增類目父類無法擁有這些方法。

類目(categroy)定義

命名規則:

類名+擴張方法

類目不繼承於父類,但介面與定義類很相似,用乙個括號表示用途。

類目(categroy)的應用

1:對類進行擴充套件。

2:作為子類的替換,可以通過類目向已有類中新增方法,與定義子類一樣。

3:把類中的方法歸類,可以更好地管理和維護類。

類目的侷限性

1:無法向類中新增例項變數,如果需要新增例項變數則只能在子類中新增。

2:如果在類目中重寫父類方法,可能導致super訊息的斷裂,因為在類目中的方法優先順序高於父類。

#import

@inte***censmutablearray(sort)

-(void)pawpawsort;

@end

#import"nsmutablearray+sort.h"

@implementationnsmutablearray(sort)

-(void)pawpawsort}}

}@end

nsmutablearray*array=[nsmutablearrayarraywithobjects:@"4432",@"234",@"3432",@"321",nil];

[arraypawpawsort];

nslog(@"%@",array);

個人心得:語法說不能給類新增屬性,要知道屬性就是方法,類目就是新增類方法的,所以個人認為是可以新增屬性的~

延展延展(extension):

在本類裡宣告私有方法。

1:延展定義的方法是在implemetation中。

2:宣告的方法是私有方法。

3:延展中宣告的方法可以不實現。

#import"host.h"

//延展的宣告

@inte***cehost()

-(bool)hashouse;

@end

@implementationhost

ios6中的用法就是以上的不要~

個人心得:可以在其他類中強制使用延展,但是系統會提示沒有定義!延展是一種特殊的類目

協議 協議(protocol):宣告一套方法,但是讓別的類實現。協議沒有父類也不能定義例項變數。

作用:1:需要有別的類實現的方法

2:宣告為之類的藉口

3:兩個類之間的通訊

協議(protocol)的特點

1:協議宣告的方法可以被任何類實現。

2:協議不是類,是定義了可以被其他類實現的介面。

3:如果在某個類中實現了協議中的乙個方法,那麼可以說這個類實現了該協議。

@required和@optional

required是必須要實現的方法,預設情況下是required

optional時可選擇實現的方法。

#import

@protocolclassprotocol

@required

-(void)notsheep;

-(void)notgetoffshoes;

@optional

-(void)notchat;

@end

#import

#import"classprotocol.h"

@inte***cestudent:nsobject<

classprotocol

>

@property(nonatomic,retain)nsstring*name;

-(id)initwithname:(nsstring*)aname;

-(void)leranclass:(nsstring*)aclass;

@end

#import"student.h"

@implementationstudent

@synthesizename=_name;

-(id)initwithname:(nsstring*)aname

returnself;

}-(void)leranclass:(nsstring*)aclass

-(void)notsheep

-(void)notgetoffshoes

-(void)dealloc

@end

**模式

即本身不做實際的事情,而要求其他人去做

例如要賣房子,不是直接銷售,二十讓中介去幫自己銷售

中介就是我們的**

//定義協議

#import

@protocolrentdelegate

@required

-(void)renter:(id)arenter

money:(int)amoney

salar:(nsstring*)asalar;

@end

#import

#import"rentdelegate.h"

#import"host.h"

@inte***cehost:nsobject

@property(nonatomic,assign)iddelegate;

@property(nonatomic,retain)nsstring*name;

@property(nonatomic,retain)nsstring*address;

-(id)initwithname:(nsstring*)aname

address:(nsstring*)aaddress;

-(void)renthouse:(nsstring*)salarname;

@end

#import"host.h"

@implementationhost

@synthesizename=_name,address=_address,delegate=_delegate;

-(id)initwithname:(nsstring*)anameaddress:(nsstring*)aaddress

returnself;

}-(void)renthouse:(nsstring*)salarname

-(void)dealloc

@end

#import

#import"rentdelegate.h"

@inte***cesalar:nsobject

@property(nonatomic,retain)nsstring*name;

-(id)initwithname:(nsstring*)aname;

@end

#import"salar.h"

@implementationsalar

@synthesizename=_name;

-(id)initwithname:(nsstring*)aname

returnself;

}-(void)renter:(id)arentermoney:(int)amoneysalar:(nsstring*)asalar

-(void)dealloc

@end

salar*s=nil;

s=[[salaralloc]initwithname:@"21世紀"];

host*host;

host=[[hostalloc]initwithname:@"wangzhibao"address:@"eeeeeee"];

host.delegate=s;

[hostrenthouse:s.name];

[hostrelease];

[srelease];

OC 類目延展協議

目錄 一 類目 什麼是類目?類目 也稱類別 category 是一種為現有類新增新方法的方式。類目和乙個類的實現非常相似,只是語法稍有不同 類目的語法 類目的特點 為什麼我們要使用類目?類目例項 現在我們要對nsstring增加新的方法用於比較兩個字串的大小,告訴使用者誰大。第一步 建立類目 第二步...

OC學習 協議 類目和延展

定義乙個student類 import 協議studentprotocol protocol studentprotocol property nonatomic,assign nsinteger age void fun1 end student類遵循協議studentprotocol inte ...

OC中的類目和延展以及非正式協議

viewcontroller.m oc 09 01 created by ibokan on 15 12 21.import viewcontroller.h import tool.h import tool tool category.h import myclass.h inte ce vie...