感慨一下:
如今,移動(dòng)互聯(lián)網(wǎng)的紅利已經(jīng)消耗殆盡,而紅極一時(shí)的移動(dòng)原生開(kāi)發(fā)現(xiàn)在也很少有公司會(huì)去嘗試,做個(gè)小程序多省事,不用找專門(mén)的原生開(kāi)發(fā)人員,推廣還方便.加上前幾年培訓(xùn)機(jī)構(gòu)瘋狂開(kāi)班向社會(huì)輸送移動(dòng)開(kāi)發(fā)人員,從而改變了這個(gè)行業(yè)的生態(tài)平衡,導(dǎo)致的結(jié)果就是在2020年的今天,一個(gè)HR 發(fā)一個(gè) iOS崗位招聘信息,仍然會(huì)有夸張簡(jiǎn)歷投遞數(shù)量,很大原因是招聘崗位變少了,而且大部分崗位的目標(biāo)都是高級(jí)開(kāi)發(fā)人員,招新手的一般都是大廠招應(yīng)屆畢業(yè)生,社招幾乎不要新手,一個(gè)很有趣的比喻就是假如你現(xiàn)在才開(kāi)始學(xué)習(xí) iOS開(kāi)發(fā),并且想以此來(lái)找到工作謀生,那就和49年加入國(guó)軍差不多,吐槽歸吐槽,技術(shù)還是得學(xué),下面開(kāi)始今天的主題
協(xié)議的一般用法也不用再贅述了,這里是我認(rèn)為協(xié)議的一個(gè)比較生僻的用法,很多人第一次看到也許會(huì)蒙逼,就是通過(guò)協(xié)議,讓一個(gè)子類去調(diào)用父類的私有方法
具體使用方法就是讓一個(gè)子類遵循一個(gè)協(xié)議,這個(gè)協(xié)議里的方法剛好是父類的同名私有方法,那么在子類沒(méi)有實(shí)現(xiàn)的前提下去調(diào)用協(xié)議方法的時(shí)候,系統(tǒng)就會(huì)幫我們往上查找到父類的私有方法并去調(diào)用
父類:
// h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Father : NSObject
@end
NS_ASSUME_NONNULL_END
//m
#import "Father.h"
@implementation Father
- (void)fatherAge:(NSInteger)age {
NSLog(@"father's age is %ld", age);
}
@end
子類:
//h
#import "Father.h"
NS_ASSUME_NONNULL_BEGIN
@interface Son : Father
- (void)sonMethod;
@end
NS_ASSUME_NONNULL_END
//m
#import "Son.h"
@protocol FatherMethod <NSObject>
@optional
//父類的同名方法
- (void)fatherAge:(NSInteger)age;
@end
@interface Son ()<FatherMethod>
@end
@implementation Son
- (void)sonMethod {
[self fatherAge:100];
}
@end
使用:
#import <Foundation/Foundation.h>
#import "Son.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Son *s = [Son new];
[s sonMethod];
// 輸出 father's age is 100
}
return 0;
}
這也印證了 OC并沒(méi)有真正的私有方法,面試的時(shí)候可以拿這個(gè)例子去說(shuō)