【面试题】基础篇01

1.atomatic nonatomic区别和理解

他们都是用来修饰属性的,区别是在编译时,编译器生成的getter和setter一个是原子操作,一个是非原子操作。

atomatic 提供多线程安全,耗性能

nonatomatic 在无需考虑不多线程的情况,使用这个,这样会让编译器少生成一些互斥锁代码,提高效率。

2.比较关键词 strong,weak,assign,copy

strong : 表示指向并拥有该对象。其修饰的对象引用计数会增加1。该对象只要引用计数不为0就不会别销毁。

weak :表示指向但不拥有该对象。其修饰的对象引用计数不会增加,无需手动设置,该对象会自行在内存中销毁。

assign:主要用来修饰基本数据类型,这些数值主要存在栈中。

weak 一般用来修饰对象,assign一般用来修饰基本数据类型。原因是assign修饰的对象被释放后,指针的地址依然存在,造成野指针,在对上容易造成崩溃。

copy和strong

不同:strong 的复制是多个指针指向同一个地址。而copy的复制每次会在内存中拷贝一份对象,指针指向不同地址。copy 一般用在修饰有可变对应类型的不可变对象上,NSString,NSArray,NSDictionary。

3.__weak __block

__weak 主要用于防止Block的循环引用。
__block 用于修饰变量,其修饰的值是动态变化的,即可以被重新赋值的。

4.KVC、KVO

KVC:KeyValueCoding

KVC可以赋值和取值
赋值:setValue:forKey:
取值:valueForKey:
能取到私有成员变量的值
简单赋值取值操作
字典转模型

KVC底层实现原理

赋值操作 setValue:forKey:
首先判断这个key是否存在setter方法,有就调用setter方法,给该属性赋值;
如果没有setter方法,判断是否有跟key相同或带下划线的属性_key,如果有,直接赋值;
如果没有成员属性_key,判断有没有跟key相同名称的属性,如果有,直接给属性赋值;
如果都没有,就会调用valueforUndefinedKey 和setValue:forUndefinedKey:方法

KVO: key value Observing

1.KVO 是基于runtime机制实现的
2.当一个对象(Person)的属性值age发生变化的时候,系统会自动生成一个继承自(Person)的类 NSKVONotifying_Person,在这个类中setAge方法里调用
[super setAge:aga];
[self willChangeValueForKey:@“age”];
[self didChangeValueForKey:@“age”];
三个方法,而后面两个方法内部会主动调用
3. -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context方法, 在该方法中可以拿到属性改变前后的值.

KVO的作用 能够监听某个对象属性值的改变

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值