网络知识 娱乐 逻辑教育大厂必备IOS面试突击班

逻辑教育大厂必备IOS面试突击班

((面试资料大全)

一、简介方法特点

 想学习这个,看代码注释

public class Hello{
    public static void main(String args[]){
        //获取课程VX : 80407290
        System.out.println("Hello World");
    }
}

6、实现多线程有哪几种方式?
(1)NSThread:detachNewThreadSelector:

(2)继承NSOperation

(3)GCD:dispatch_async

(4)NSObject:performSelectorInBackground:

7、KVC、KVO是什么?简述KVO的实现原理。KVO能否监听数组?如何实现?
KVC:键值编码,它是一种间接访问对象实例变量机制,可以不通过存取方法访问对象的实例变量。

KVO:键值观察,它可以使对象获取其他对象属性变化的通知机制。

KVO是根据isa-swizzling技术来实现的,主要依据runtime的强大动态能力。当给某个对象第一次添加KVO监听的时候,运行时会动态的创建一个被监听对象的派生类,然后重写KVO需要监听属性值对应的setter方法,在这个setter方法中实现了通知机制。最后将被监听对象的isa指向动态创建的派生类。这样当使用KVC修改属性值时,就会调用动态创建的派生类中对应的setter方法,触发通知机制,从而实现了KVO了。
KVO可以监听数组。

实现 NSMutableArray 的增删改操作遵从 KVC 的规则,需要实现其对应方法:

增操作 -insertObject:inAtIndex: 或者 -insert:atIndexes:

删操作 -removeObjectFromAtIndex: 或者 -removeAtIndexes:

改操作 -replaceObjectInAtIndex:withObject: 或者 -replaceAtIndexes:with:

并将这些接口暴露给调用者,在对数组进行操作时需使用上述实现的接口。

8、简单说下C++,JAVA,Objective-C这几种语言有什么区别?


Objective-C与JAVA都是单继承语言,C++是多继承语言。

Objective-C不支持命名空间机制,通过类名前面加前缀NS来区分。

Objective-C与JAVA不支持运算符重载。

Objective-C协议可选实现,JAVA的接口必须实现。

9、数组添加nil元素有问题吗?字典object与key可以设置为nil吗?


会有问题,数组中添加nil元素,程序会崩溃!报object cannot be nil错误。字典的key不能为nil,否则会造成崩溃。字典的object也不能为nil。

10、oc中向一个nil对象发送消息会出现问题吗?


不会出现问题,因为objc是动态语言,每个方法在运行时会被动态转为消息发送。即:objc_msgSend(receiver,selector)。objc在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后在该类中的方法列表以及其父类方法列表中寻找方法运行,然后在发送消息的时候,objc_msgSend方法不会返回值,所谓的返回内容都是具体调用时执行的。 那么,回到本题,如果向一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误。

11、可变数组是线程安全的吗?什么情况下不安全?可以加锁吗?它锁住的是添加元素操作还是数组对象?


可变数组不是线程安全的,在异步读取数据的情况下是不安全的。可以加锁,锁住的是数组。

12、数组能添加一个block吗?数组添加一个block之后再取出来,这个block还有用吗?


可以,还有用,它只是多retain了一次