類和辦法的界說
普通類都是繼續NSObject,新建一個類時父類選擇NSObject便可,oc只要單繼續,沒有多繼續。
上面以一個簡略的oc工程來說解(需設置裝備擺設好Xcode對象以響應的SDK),會建工程的請直接跳到‘六'步調。
1、新建一個oc編譯情況,翻開xcode->File->New->Project(快捷鍵 command+shift+N)。
2、選擇OS X--Application--Command Line Tool,選擇next
3、填寫項目稱號(最好英文),你本身的名字,和公司的標記。Type選擇Foundation,上面的勾表現能否選擇ARC,建議初學者勾上。點擊next
4、此時工程建好了,會看到一個main.m文件,一切的挪用都在main.m中完成。
新建一個類,command+N,選擇父類NSObject,取名people
5、點擊next以後,湧現以下界面,切記上面的√要打上。不然在編譯時工程搜刮不到此文件,會湧現編譯毛病。
6、在people.h文件interface中添加變量,NSString為OC的字符串變量。
@interface Person : NSObject {
NSString * _name;
int _age;
}
然後在{}裡面界說變量的初始化辦法和set辦法,格局:-(類型)辦法名:(參數類型)參數1 參數名:(參數類型)參數2……,set辦法名普通為set變量名,變量名首字母年夜寫,此未蘋果官方文檔上的解釋
-(void)setAge:(int)age;
-(void)setName:(NSString *)name;
界說變量的get辦法,get辦法名異樣為get變量名
-(int)age;
-(NSString *)name;
7、在people.m文件中完成people.h文件中聲明的辦法。
-(void)setAge:(int)age {
_age = age;
}
-(void)setName:(NSString *)name {
_name = [name copy];//copy辦法觸及到oc的內存治理機制。應用copy可避免內存洩漏
}
-(int)age {
return _age;
}
-(NSString *)name {
return _name;
}
7、在main.m中界說一個people類,並對其屬性變量停止初始化。
界說一個people類:
Person *dwight = [[Person alloc] init];
給其屬性賦值:
[dwight setName:@"Dwight Schrute"];
[dwight setAge:38];
打印值:
NSLog(@"%@ (%d)", [dwight name], [dwight age]);
PS:普通NSString,NSArray,NSDictionary,NSData等類型的值打印用%@,int等C中的類型,依照C說話打印的症結字打印,NSInteger,NSNumber打印時用%d。
打印成果:
protocol協定,設置署理
協定(protocol)是ObjC中很主要的一部門,它用來界說可由任何其他類完成的辦法,當本類中須要完成某些功效時,可由protocol來完成
protocol在三種情形中須要用到:
須要聲明其余類希冀完成的辦法時
在隱蔽本身類的情形下聲明該類對象的接口時
在某些沒有繼續關系的類之間獲得其之間的類似性,即兩個類之間沒有繼續關系,然則都須要完成異樣的辦法時,便可經由過程署理來完成。
protocol文件中只是界說一些辦法,當你在類中完成了這個protocol時,你就須要彌補這些辦法,體系會主動挪用這些辦法
protocol中辦法分為@required和@optional,個中在@required下的辦法必需完成,@optional中辦法是選擇性完成,也可不完成。
上面以一個簡略實例解釋protocol的用法(OS X下)在IOS下異樣應用
1、新建一個Objective-C class,定名為IOSCoder
①、在IOSCoder@end前面界說一個protocol,定名為MyprotocolDelegate,並聲明@required和@optional辦法
②、在#import後聲明@protocol MyprotocolDelegate
③、在interface中聲明屬性@property(nonatomic,assign) id<MyprotocolDelegate> delegate;
全部.h文件以下
#import <Cocoa/Cocoa.h>
@protocol MyprotocolDelegate;
@interface iOSCoder : NSObject
//聲明delegate屬性
@property(nonatomic,assign) id<MyprotocolDelegate> delegate;
@end
//界說protocol
@protocol MyprotocolDelegate <NSObject>
//必需完成辦法
@required
-(void)StartObjectiveC;
-(void)StartPrograming;
//選擇完成辦法
@optional
-(void)StartJavaScript;
-(void)Startpython;
@end
2、在須要用到iOSCoder類的文件中,聲明並停止初始化
假如要用到iOSCoder中的delegate,則必需在.h文件中停止聲明,聲明格局
@interface 類名:繼續類<MyprotocolDelegate>
界說iOSCoder對象
iOSCoder *ios = [[iOSCoder alloc] init];
ios.delegate = self;
if ([ios respondsToSelector:@selector(StartObjectiveC)]) {
[self StartObjectiveC];
}
if ([ios respondsToSelector:@selector(StartPrograming)]) {
[self StartPrograming];
}
完成required辦法
-(void) StartObjectiveC
{
NSLog(@"@required,StartObjectiveC");
}
-(void)StartPrograming
{
NSLog(@"@required,StartPrograming");
}
附:在iOS ViewController中應用時
假定A要跳轉到B頁面時須要在B頁面中完成A中的protocol辦法
.h文件
#import <UIKit/UIKit.h>
@class AViewController;
@protocol ADelegate <NSObject>
- (void) AMethod
@end
@interface AViewController : UIViewController
{
id<ADelegate> _delegate;
}
@property(nonatomic,assign)id<ADelegate> delegate;
@end
在頁面跳轉之前加上
if (_delegate && [_delegate respondsToSelector:@selector(AMethod)]) {
[_delegate AMethod];
}
在B頁面中聲明朝理<ADelegate>,完成AMethod辦法,實例化A對象,並設置署理
則在B界面會挪用AMethod辦法,即完成了protocol的完成
【Objective-C中類和辦法的界說和協定的應用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!