你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Objective-C中類和辦法的界說和協定的應用

Objective-C中類和辦法的界說和協定的應用

編輯:IOS開發綜合

類和辦法的界說
普通類都是繼續NSObject,新建一個類時父類選擇NSObject便可,oc只要單繼續,沒有多繼續。

上面以一個簡略的oc工程來說解(需設置裝備擺設好Xcode對象以響應的SDK),會建工程的請直接跳到‘六'步調。

1、新建一個oc編譯情況,翻開xcode->File->New->Project(快捷鍵 command+shift+N)。

2、選擇OS X--Application--Command Line Tool,選擇next

201612892433475.png (718×258)

3、填寫項目稱號(最好英文),你本身的名字,和公司的標記。Type選擇Foundation,上面的勾表現能否選擇ARC,建議初學者勾上。點擊next

201612892459908.png (539×273)

4、此時工程建好了,會看到一個main.m文件,一切的挪用都在main.m中完成。

新建一個類,command+N,選擇父類NSObject,取名people

201612892516548.png (536×135)

5、點擊next以後,湧現以下界面,切記上面的√要打上。不然在編譯時工程搜刮不到此文件,會湧現編譯毛病。

201612892534955.png (366×104)

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。

打印成果:

201612892550587.png (409×62)


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中類和辦法的界說和協定的應用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved