当前位置:首页 工作范文 高级ios工程师面试题

高级ios工程师面试题

发布时间:2023-08-27 06:48:22

1. 怎么修改只读(readonly)属性变量

使用KVC可以修改 kvc就是键值编码(key-value),可以通过指定的key获得想要的值value,而不是通过调用 Setter,Getter 方法访问

高级ios工程师面试题

2.KVO 除了能观察属性外,能不能观察对象

不能观察对象

KVO,即 Key-Value Observing, 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察者的对象的属性被修改后,KVO就会自动通知相应的观察者了

KVO是一个对象能过观察另外一个对象的属性的值,并且能够发现值的变化。这是一个对象与另一个对象保持同步的一种方法,即当另一种对象的状态发生改变时,观察对象马上做出反应。它只能用来对属性做出反应,而不会用来对方法或者动作做出反应。

实现原理:当为某个对象属性注册监听的时候,该对象的 isa 指针就会指向一个中间类,而不是本来对象真实的类。所以说,对象的 isa 指针可以改变,我们的程序最好不要依赖 isa 指针。

简言而之就是:

1.当一个 object 有观察者时没动态创建这个 object 的类的子类

高级ios工程师面试题

2.对于每一个被观察的 property, 重写其 set 方法

3.在重写的 set 方法中调用- willChangevalueForKey:和- didChangevalueForKey:通知观察者

4.当一个 property 没有观察者时,删除重写方法

5.当一个 boserver 观察任何一个 property 时,删除动态创建的子类

3.block里面能不能修改静态变量

能 __block 可以 ---> 为什么要用__block

你可以指定引入一个变量为可更改的,即读-写的,通过应用__block存储类型修改修饰符。

局部变量的.__block的存储和register,auto,static等存储类型相似,但它们之间不兼容。

高级ios工程师面试题

__block 变量保存在变量共享的作用域范围内,所有的 blocks 和 block 副本都声明或创建在和变量的作用于相同范围内。所以,如果任何 blocks 副本声明在栈内并未超出栈的结束时,该存储会让栈帧免于被破坏(比如封装为以后执行)。同一作用域范围内给定的多个 block 可以同时使用一个共享变量作为一种优化, block 存储在栈上面,就像blocks本身一样。如果使用 Block_copy 拷贝了 block 得一个副本(或者在 objective-C里面给 block 发送了一条 copy 消息),变量会被拷贝到堆上面。所以一个__ block 变量的地址可以随时间推移而更改。

使用 __block的变量有两个限制:

1.它们不能是可变长的数组

2.它们不能是包含有 C99可变疮毒的数组变量的数据结构

温馨提示:
本文【高级ios工程师面试题】由作者 范文虾 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6