iOS 面试InterviewiOS-面试题

iOS面试题之人在面试都是套路(三)**教育公司iOS面试题

2016-10-27  本文已影响2148人  Miu七七

此家公司比较**(文明文明,和谐掉了),不解释,面试题出一大堆,都是没营养的,一去公司都在趴着写题。

**教育 iOS面试题第一页 **教育 iOS面试题第二页

1. 用三种方式生成内容为数字1 2 3的可变数组。(OC实现)?

三种

2. OC中,分类和扩展有何异同?

extension好比私有的category。
深入理解Objective-C:Category--想深入了解 category编译过程 (美团技术出品)
iOS 开发中的争议(一)--添加成员变量方法
Associated Objects--使用Associated(NSHipster讲解)
iOS学习笔记:Category与Extension的区别

3. 你了解的KVO的开源封装?

KeyValueObserver辅助类
封装了-addObserver:forKeyPath:options:context:,
-observeValueForKeyPath:ofObject:change:context:
和-removeObserverForKeyPath:的调用,让视图控制器远离杂乱的代码。

4. 是否了解Java?Java的Interface与OC中的Protocol有哪些区别?(令人无语的题目,我又不是应聘java)

interface AI{  
    void print();  
};  
    class AC{  
};  

这时候,AI和AC是独立存在,AC不会因为没有和AI建立关系而编译错误,将AC做以下修改后,AI才和AC建立了关系,AC必须实现AI中声明的方法才能通过编译。

class AC implement AI{  
    void print(){  
        system.out.println('Hello World');  
    }  
};  

5.你了解哪些设计模式(MVC 观察者 代理 单例除外)?

工厂模式---Factory Method

工厂模式

6.请简述MVVM,以及相对于MVC的优点?

MVC
MVC是一种架构模式,M表示Model,V表示视图View,C表示控制器Controller

RAC+MVVM

7.OC类中如何声明私有属性?(或者私有方法)

  @interface Sample : NSObject{ 
            @private 
             NSString *test1;
} 
@property (nonatomic,strong) NSString *test2;
 - (void)eat;
@end 

8. 写出以下属性在MRC中的赋值方法

@property(nonatomic, copy)NSString *name;

9. 对于被block捕获的对象,为何经常用 _ _weak和 __block修饰?这两种修饰有何差别?

__block关键字

//错误的写法
int i = 1;
void (^block)(void) = ^{
    i = i + 1;
};

应该写成:

__block int i = 1;
void (^block)(void) = ^{
    i = i + 1;
};

__weak 关键字

@interface BlockClass : NSObject
   - (void)doSomthing;
@property (copy, nonatomic) void (^myBlock)(void);
@end
@implementation BlockClass

  - (instancetype)init{
    self = [super init];
    if (self) {
        self.myBlock = ^ {
            [self doSomthing];
        };
    }
    return self;
}
-(void)doSomthing
{
}
@end

如果我们不想让self被myBlock给retain起来,我们就要把self变成弱引用再传到block中,像是改成以下这样:

__weak BlockClass *weakSelf = self;
self.myBlock = ^ {
    [weakSelf doSomthing];
};

10.以下写法会导致哪些问题?

@property(copy)NSMutableArray *array;

两个问题:
1、添加,删除,修改数组内的元素的时候,程序会因为找不到对应的方法而崩溃.因为 copy 就是复制一个不可变 NSArray 的对象;
2、使用了 atomic 属性会严重影响性能 ;
详细解释请移步
《招聘一个靠谱的iOS》面试题参考答案(上)

11. 谈谈id和instancetype的异同?

1、相同点
都可以作为方法的返回类型
2、不同点
(1)instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
(2)instancetype只能作为返回值,不能像id那样作为参数,比如下面的写法:

//err,expected a type 
 - (void)setValue:(instancetype)value { 
      //do something
 }

以上的写法就是错误的

//正确的做法
- (void)setValue:(id)value { 
        //do something
 }

12. #import与#include、@class之间的区别?

#include 和#import其效果相同,都是查询类中定义的行为(方法);
#import不会引起交叉编译,确保头文件只会被导入一次;
@class 的表明,只定 义了类的名称,而具体类的行为是未知的,一般用于.h 文件;
@class 比#import 编译效率更高。
此外@class 和#import 的主要区别在于解决引用死锁的问题。

13.#import<>和#import“”之间的区别?

#import<>引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.
#import"":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查

14.我们把OC称作为一门运行时语言,为什么?(还整英文🙄)

15.什么是响应链?它是如何工作的?(出这么简单的英文有意思吗)

未完待续

上一篇下一篇

猜你喜欢

热点阅读