iOS基礎之Objective-C(一)

OC面向對象新增語法:
1、屬性生成器:

  • @property //聲明屬性
    例:
    @property (nonatomic,strong) NSString *name;

  • @synthesize //合成屬性,相當于同時設置了getter方法和setter方法
    例:
    @synthesize name = _name;


2、分類Category

  • 分類與繼承
  • 使用分類擴展類,無需子類化

例:


//Person+LP.h
#import"Person.h"
@interfacePerson(LP)
-(void)study;
@end

//Person+LP.m
#import"Person+LP.h"
@implementationPerson(LP)
-(void)study{
NSLog(@"正在學習----");
}
@end

//main.m
#import<Foundation/Foundation.h>
#import"Person.h"
#import"Person+LP.h"

intmain(intargc,constcharchar*argv[]){
@autoreleasepool{
Person*p1=[[Personalloc]initWithAge:33andName:@"jack"];
NSLog(@"年齡是:%d,名字是:%@",p1.age,p1.name);
//調用分類的方法
[p1study];
}
return0;
}

3、協(xié)議Protocol

  • 使用協(xié)議聲明方法
  • 協(xié)議類似于C#,Java中的接口
    例:
@protocol MyProtocol
-(void)myProtocolMethod;
end

PS:分類,拓展與協(xié)議的區(qū)別
1、分類

  • 適用范圍
    當你已經封裝好了一個類(也可能是系統(tǒng)類、第三方庫),不想在改動這個類了,可是隨著程序功能的增加需要在類中增加一個方法,這時我們不必修改主類,只需要給你原來的類增加一個分類。
    將一個大型的類拆分成不同的分類,在不同分類中實現類別聲明的方法,這樣可以將一個類的實現寫到多個.m文件中,方便管理和協(xié)同開發(fā)。
    分類中的方法可以只聲明,不實現,所以在協(xié)議不支持可選方法的時候(協(xié)議現在已經支持可選方法),通常把分類作為非正式協(xié)議使用。

  • 語法格式
    文件中的語法
    @interface 主類類名(分類類名)
    @end
    @implementation主類類名(分類類名)
    @end
    文件名通常為:主類名+分類名

    調用方法時,只需要向主類引用放送消息即可

  • 注意事項
    分類中方法的優(yōu)先級比原來類中的方法高,也就是說,在分類中重寫了原來類中的方法,那么分類中的方法會覆蓋原來類中的方法
    分類中只能聲明方法,不能添加屬性變量,在運行時分類中的方法與主類中的方法沒有區(qū)別
    通常來講,分類定義在.h文件中,但也可以定義.m文件中,此時分類的方法就變成私有方法

  • 如何使用

//定義XYZPopViewController類的分類
//XYZPopViewController+CatController.h文件
@interfaceXYZPopViewController (CatController)
- (void)test;
@end

//XYZPopViewController+CatController.m文件
@implementationXYZPopViewController (CatController)
- (void)test {
NSLog(@"測試一下XYZPopViewController的分類");
}
@end

2、擴展

  • 適用范圍
    擴展是分類的一種特殊形式。

  • 語法格式**
    @interface 主類類名()
    @end **
    擴展通常定義在主類.m文件中,擴展中聲明的方法直接在主類的.m文件中實現。

  • 注意事項
    擴展中可以聲明實例變量,可以聲明屬性,因為擴展通常定義在主類的.m文件中,所以擴展聲明的方法和屬性通常是私有的

  • 如何使用

//定義XYZPopViewController類的擴展
//方式1、以單獨的文件定義
//XYZPopViewController_ExViewController.h文件
#import"XYZPopViewController.h"

@interfaceXYZPopViewController()
@property(nonatomic,strong)NSString*stringOfEx;
- (void)testEx;@end

//方式2、在主類的.m文件中定義
//XYZPopViewController.m文件
#import"XYZPopViewController.h"

@interfaceXYZPopViewController()
@property(nonatomic,strong)NSString*stringOfEx;

- (void)testEx;
@end

@implementationXYZPopViewController
@end

//在主類的.m文件中實現擴展定的方法
#import"XYZPopViewController.h"
//import"XYZPopViewController_ExViewController.h"

@interfaceXYZPopViewController()

@end

@implementationXYZPopViewController
- (void)testEx {
  self.stringOfEx=@"給擴展里面定義的屬性字符串賦值";
  NSLog(@"定義的屬性String是:%@",self.stringOfEx);
}
@end

3、協(xié)議

  • 適用范圍
    協(xié)議用來制定一個規(guī)則,一個對象遵守某個協(xié)議,就相當于必須遵守它的規(guī)則(實現必須實現的方法),也就擁有了一種能力。通常適用協(xié)議來實現委托代理模式的傳值和消息發(fā)送。

  • 語法格式
    聲明協(xié)議**
    @protocol 協(xié)議名 <>
     @required 聲明必須遵守的屬性和方法,默認!
     @optional 聲明可選的屬性和方法
    @end
    **
    一個類遵守一個協(xié)議
    @interface 類名(分類名):父類名 <協(xié)議名>
    @end

  • 注意事項
    協(xié)議的繼承相當于協(xié)議的合并
    一個類可以同時遵守多個協(xié)議,協(xié)議之間用","號分開如果一個類遵守一個協(xié)議,那么它的子類也遵守協(xié)議的使用和多態(tài)相類似,可以用作數組、參數、返回值類型,只不過多態(tài)返回的對象,一定要有繼承關系,協(xié)議類型返回的對象,一定要有遵守協(xié)議或實現協(xié)議。

  • 如何使用
    在一個對象A中定義一個協(xié)議類型的引用,讓這個引用指向實現了協(xié)議或者遵守了協(xié)議的對象B,A對象可以在合適的時候通過這個引用向遵守了協(xié)議的對象B發(fā)送消息(只能發(fā)送協(xié)議要求的消息)。由于對象B遵守協(xié)議,在B中實現了協(xié)議要求的方法,所以當A通過這個協(xié)議類型的引用發(fā)送消息時,B就會執(zhí)行這個方法實現的相關操作。

    定義一個協(xié)議

#import<Foundation/Foundation.h>

@protocolXYZProtocolDelegate <NSObject>
-(void)changedColor:(UIColor*)color;
@end

//在對象A中定義一個協(xié)議類型的引用
@interfaceXYZPopViewController :UIViewController@property(nonatomic,weak)id<XYZProtocolDelegate> delegate;
@end
//A對象可以在合適的時候通過這個引用向遵守了協(xié)議的對象B發(fā)送消息(點擊button發(fā)送一個消息)
- (void)buttonClick:(UIButton*)button {
[self.delegatechangedColor:[UIColoryellowColor]];
}
//對象B遵守協(xié)議
@interfaceXYZDetailViewController()<XYZProtocolDelegate>

@end
//對象B中實現協(xié)議要求的方法
- (void)changedColor:(UIColor*)color {
  self.textView.textColor= color;
}
//在對象B中得到對象A的引用,把A中定義的那個協(xié)議類型的引用指向自身(一般是在B中創(chuàng)建或者初始化A時)
XYZPopViewController*pVC = [[XYZPopViewControlleralloc]init];
pVC.delegate=self;
協(xié)議示意圖

4、Fundation框架:

  • 創(chuàng)建和管理集合,如數組和字典
  • 訪問存儲在應用中的圖像和其他資源
  • 創(chuàng)建和管理字符串
  • 發(fā)布和觀察通知
  • 創(chuàng)建日期和時間對象
  • 操控URL流
  • 異步執(zhí)行代碼

5、新增異常處理

  • 用于處理錯誤信息
  • 格式:
    @try{ }@catch( ){ }@finally{ }

PS:回顧一下C語言的那些內容

C語言

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容