美文网首页
2021-01-08 准备面试之总结(持续更新)

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

作者: 生烫三合一 | 来源:发表于2021-01-08 15:36 被阅读0次

一,一个界面等需要请求多个接口时候,用上多线程,之后再刷新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是怎么实现的,原理?


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

相关文章

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

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

  • Vue 面试题总结及答案

    最近一段时间在总结学习内容,要准备面试,下面有我最近弄得 Vue 面试题及答案,会持续更新Vue 面试题总结

  • Java面试准备(持续更新)

    常见的面试问题和面试 遇到的一些没答上来的问题总结。有些问题可能平时学习时容易忽略,面试被问到了才后悔没有仔细研究...

  • 面试总结(持续更新中)

    3月1日面试(知春路一小公司)由浅入深 1.应用程序的生命周期。 有storyboard情况下: 1.main函数...

  • 面试小总结,持续更新

  • 面试总结(持续更新中.....)

    1. GET和POST的区别 区别: Get从服务器获取数据,Post向服务器传送数据 Get传值在url中可见...

  • 面试题

    历年阿里面试题汇总(2017年不断更新中)面试总结Java面试重难点剖析(不断更新)Java方向如何准备BAT技术...

  • JS基础面试题——变量类型和计算

    因为最近在准备面试,所以总结了一些前端面试题供大家参考,后续会持续更新中,发出来的可能只是一些大类,一些具体的题还...

  • Interview experience

    一个记录总结面试经验的记录(持续更新) 360 本来是视频面试,因为360原因,变成电话面试一面 自我介绍 在实习...

  • 前端面试总结——持续更新

    写在前面的话: 写文目的:总结前端面试过程中没回答上来的点,深化印象,也方便日后温习。 写文方法:写之前先自己看相...

网友评论

      本文标题:2021-01-08 准备面试之总结(持续更新)

      本文链接:https://www.haomeiwen.com/subject/uugxaktx.html