2021-01-08 准备面试之总结(持续更新)

一,一个界面等需要请求多个接口时候,用上多线程,之后再刷新UI,而不是在AF的回调里 再次请求下一个接口,上代码。

-(void)loadRequest

{

    NSLog(@"STAR");

    //线程

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //创建分组

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, queue, ^{

                NSLog(@"数据请求1");

    });

    dispatch_group_async(group, queue, ^{

            NSLog(@"数据请求2");

    });

    /**

     *  回到主线程刷新UI

     */

    dispatch_group_notify(group, dispatch_get_main_queue(), ^{

        NSLog(@"刷新UI");

    });

    NSLog(@"END");

}

打印结果为 

STAR END  数据请求1 数据请求2 刷新UI


二,block 其实就是一个对象,用copy修饰只是MRC的产物,把block从栈拷贝到堆,可以在作用域之外使用(防止崩溃),现在实际上用strong 也是没问题的。

三,性能优化方面

1,使用轻量级的对象可以考虑使用CALayer取代UIView,不要频繁地调用UIView的相关属性,比如frame、bounds、transform等属性,尽量减少不必要的修改。

2,如果有卡顿,一般来说是在主线程中写有一些耗时的操作,可以添加观察者(Observer)到主线程RunLoop中,通过监听RunLoop状态切换的耗时,以达到监控卡顿的目的。

三,KVC ,KVO

KVC:键值编码,使用字符串访问对象的属性。

工作原理:检查key相对应的set方法是否存在,如果存在就直接调用set方法,如果不存在,就会查找和key相同名字并且带_的成员属性(_key),如果存在就把_key赋值给属性,如果不存在,就会查找相同名称的属性key,如果有就直接赋值,如果没有就会调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。

KVO:键值对观察机制

工作原理:当给A类添加观察值时,runtime 动态生成一个衍生类(子类)NSKVONotifying_A,并把A类的isa指针 指向NSKVONotifying_A,重写class,隐藏对象真实类信息。重写setter方法,当监听对象的值发生改变的时候会调用willChangeValueForKey/didChangeValueForKey,,向系统发出NSKeyValueChangeSetting的通知,然后系统的通知中心,就会通知监听者,调用-observeValueForKeyPath:ofObject:change:context:方法来实现监听被监听者的值改变。

三,Masonry链式语法怎么实现的

如make.top.left 其实我们只需要把make.top的返回值变成self就可以继续调用了

如make.top.equalTo(@"20"); 我们只需要加一个block作为返回的值,就可以了。上代码

Person类.h:

-(Person *)getFirstName;

-(Person *)getLastName;

-(void(^)(int))getAge;

-(Person*(^)(NSString*))getSex;

-(void)createPerson:(void(^)(Person*person))Block;

.m:

-(Person *)getFirstName{

    self.firstName =@"李";

    return self;

}

-(Person *)getLastName{

    self.lastName=@"kf";

    return self;

}

-(void(^)(int))getAge{

    return^(intage){

        self.age=age;

    };

}

-(Person*(^)(NSString*))getSex{

    return^(NSString* sex){

        self.sex= sex;

        returnself;

    };

}

-(void)createPerson:(void(^)(Person*))Block{

    Block(self);

}

调用他

 Person*per = [[Personalloc]init];

    [percreatePerson:^(Person*_Nonnullperson) {

        person.getFirstName.getLastName.getSex(@"男").getAge(100);

    }];

    NSLog(@"%@",per.sex);

    NSLog(@"%d",per.age);

    NSLog(@"%@",per.firstName);

    NSLog(@"%@",per.lastName);


2021-01-13 15:33:45.995444+0800 single[3860:80865] 男

2021-01-13 15:33:45.995564+0800 single[3860:80865] 100

2021-01-13 15:33:45.995678+0800 single[3860:80865] 李

2021-01-13 15:33:45.995787+0800 single[3860:80865] KF

就完成了 比较简洁 

四,Nsstring 作为属性到底用什么修饰?

在不可变的nsstring情况下其实都一样,copy,strong 都一样 因为他们指向同一个地址。

但是mutbleString的时候并且修改他的值,copy不再指向string的地址,进行了深拷贝,所以是无法修改的

strong是可以修改的。上代码

-(void)testMutbleString{NSMutableString*mutbleString=[NSMutableString stringWithFormat:@"lkf"];

self.strongStr=mutbleString;

self.copyedStr=mutbleString;

// [mutbleString appendString:@" 123"];

NSLog(@"mut origin string: %p, %p",mutbleString,&mutbleString);

NSLog(@"mut strong string: %p, %p",_strongStr,&_strongStr);

NSLog(@"mut copyed string: %p, %p",_copyedStr,&_copyedStr);

}

这时候strong 和 原有的 地址是会变的 输出也是 @“lkf123”

但是copy输出则是@"lkf"

四,MJExtension是怎么实现的,原理?


如有不足,或者错误,请您马上翻脸指出,持续更新,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容