Objective-c是c語(yǔ)言的超集, 就是objective-c是基礎(chǔ)C語(yǔ)言的基礎(chǔ)上疯兼,增加了擴(kuò)展庫(kù)皇拣,并在gcc上增加對(duì)Objective-c的編譯,這些只是最開始的功能焦影,后來(lái)蘋果公司引入了clang和llvm(底層虛擬機(jī))來(lái)對(duì)Objective-c進(jìn)行編譯執(zhí)行,擴(kuò)展了Objective-c的新特性.
類
person.h
// .h文件是一個(gè)類的對(duì)外接口申明的文件优俘,其他模塊通過(guò)import "xxx.h"引入诲祸。
#import <Foundation/Foundation.h>
//NSObject是父類
@interface Person: NSObject {
// property是集合setter和getter函數(shù),對(duì)變量"_firstName"處理的封裝,使用方法就是self.firstName
// 屬性 strong,weak, readwrite, copy
@property (屬性) NSString *firstName;
// 實(shí)例化方法
- (void)getAge;
// 類方法
+ (void) fromWhere;
}
// 使用多參數(shù)和返回值
- (NSString *) PhoneNumberOfFriend:(NSString *) friendName;
}
person.m
# import "person.h"
NSString *test1;
// 在.m文件 中可以再次申明
@interface Person()
// 私有實(shí)體變量 protected
NSString *lastName;
@end
@implementation Person
// 私有實(shí)體變量 private
NSString *lastName2浊吏;
- (void)getAge{
NSLog(@"My age 14");
}
@end
數(shù)據(jù)類型
巧婦難為無(wú)米之炊, 數(shù)據(jù)就是我們需要處理的對(duì)象
int 整型
char 字符型
NSInteger 整型對(duì)象與int區(qū)別
NSUInteger 無(wú)符號(hào)整型對(duì)象
NSRange 獲取位置信息struct (location, length)一般用于字符串定位
NSString 字符串類型
NSMutableString 可修改的字符串類型
NSNumber (整形,浮點(diǎn)型救氯,布爾類型, 字符轉(zhuǎn)為數(shù)字類型)
NSValue 集合中存放的為對(duì)象找田,一些結(jié)構(gòu)體可以轉(zhuǎn)化為NSValue對(duì)象進(jìn)行存儲(chǔ),并且需要使用的時(shí)候可以轉(zhuǎn)化為原來(lái)的結(jié)構(gòu)着憨。
集合分為:
NSArray: @[xx,xx]
NSDictionary:@{xx:xx}
NSSet,NSMutableArray等
常見的基本類型將填充到集合中
塊的使用
塊可以理解為一個(gè)匿名的閉包函數(shù),類似于python的lambada表達(dá)式
// 先申明后定義
(double) (^mulToValue)(double, double);
mulToValue = ^ double (double x, double y){
return x * y;
};
// 直接定義
(double) (^mulToValue)(double, double)= ^ (double x, double y){
return x * y;
};
// 關(guān)于塊中變量的作用空間
(void)testMethod (){
int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"Integer is: %i", anInteger);
};
anInteger = 55;
testBlock();
}
// 實(shí)際執(zhí)行墩衙,顯示42,因?yàn)閍ninteger變量最終的數(shù)值是55
// 如果想要在塊內(nèi)部修改塊外部的變量就應(yīng)該如此聲明變量
__block int anInteger = 42;
// 塊作為參數(shù)傳遞
+(double) testBlock:(double(^)(double x, double y))mulFunc;
// 類方法定義
+(double)testBlock:(double (^)(double, double))mulFunc{
return mulFunc(6,7);
}
// 塊使用
double result = [Person testBlock:^double(double x, double y) {
return x*y;
}];
協(xié)議
假設(shè)A為B提供服務(wù), 但是B要遵守A制定的協(xié)議,A才能完成幫助其完成.
阿拉丁神燈能夠滿足他主人的愿望,但是這個(gè)主人需要滿足阿拉丁制定的協(xié)議,總共只有三次機(jī)會(huì),每次都要說(shuō)出愿望(當(dāng)然不能是在給三次機(jī)會(huì)啦)
// 定義協(xié)議,可以申明類或者實(shí)例的方法,并且協(xié)議之間也可以進(jìn)行集成
// 這個(gè)協(xié)議申明在.h文件中
@protocol Love<協(xié)議繼承>
// 申明方法
- (NSString *) sayGIrlFriend;
@end
// Man服務(wù)的提供者
@interface Man
// 在某個(gè)方法中,會(huì)調(diào)用[self.delegate SayGirlFriend]
@property (nonatomic, weak) id<Love> delegate;
@end
// 遵守協(xié)議
@interface SuperMan:NSObject <Love>
@end
@implementation SuperMan
// 完成協(xié)議,在某個(gè)方法中self.man.delegate = self完成協(xié)議指向
- (NSString *) sayGIrlFriend{
return @"I Love U!";
}
@end
分類
category 是對(duì)已經(jīng)存在的類增加新的方法, 并提出一個(gè)分類的類甲抖,來(lái)申明和實(shí)現(xiàn)此方法.用分類可以分離部分函數(shù)的實(shí)現(xiàn)漆改。
#import "XYZPerson.h"
@interface XYZPerson (XYZPersonNameDisplayAdditions)
- (NSString *)lastNameFirstNameString;
@end
--------------------------------------
#import "XYZPerson+XYZPersonNameDisplayAdditions.h"
@implementation XYZPerson (XYZPersonNameDisplayAdditions)
- (NSString *)lastNameFirstNameString {
return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName];
}
@end