笔试题

1 Objective-C语言的消息机制和其他语言的普通函数调用有什么区别?

答:对于C语言,函数的调用在编译器的时候决定调用哪个函数,编译完之后直接顺序执行。OC的函数调用成为消息发送,属于动态调用过程,在编译的时候不能决定真正调用哪个函数(在编译阶段,oc可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错,而c语言在编译阶段会报错)。

2 UIView的frame,bounds,center有什么区别?各自的使用场景是什么?

3 @property后面可以有哪些修饰符?分别列举说明具体含义,weak与assign的使用场景有什么区别?

4 UIViewController的loadView和viewDidLoad分别是什么时候触发调用,哪一个函数不可以直接调用,如何间接触他们的调用?

5 ARC和MRC下有哪些常见的内存泄漏的场景,如何解决?

6 CALayer的position和anchorPoint分别是什么,如何使用?

7 +(void)load;+(void)initalize;什么时候调用,有使用过这两个方法完成过什么功能呢?

答:

// 调用顺序:从上往下

+ (void)load {//APP启动的时候调用,初始化各个类    //只会调用一次}

+ (void)initialize {//第一次使用类时调用    //类的懒加载,只会调用一次}

- (void)loadView {//加载默认的view    //控制器类型的类才有此方法    //如果重写不能空实现,需要自定义一个默认的view}

8 Objective-C是否有多重继承,为什么?如果有,请写一个多重继承的类.若没有,可以用什么方法来替代实现?

答:Object-c的类没有多继承,只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现,OC类似于多继承,是在 用protocol委托代理来实现的;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

9 谈谈你对MVC中Model和MVVM中ViewModel的理解.

10 现在我们有一个UIButton按钮大小只有20px*30px,请问怎么样可以在不改变按钮尺寸大小增大响应区域到44px*44px?

11 请结合单例和block补全下面代码完成一个简单加法的计算器

#import "CalculateManager.h"

@implementation CalculateManager

+ (instancetype)sharedManager {

static dispatch_once_t onceToken;

static  CalculateManager *instance = nil;

dispatch_once(&onceToken,^{

instance = [[self alloc] init];

});

return instance;

}

- (int64_t)caculateParamA:(int64_t)a AddParamB:(int64_t)b {

typedef int64_t (^HzyAddBlock) (int64_t ,int64_t);

HzyAddBlock addBlock = ^(int64_t a, int64_t b){ return a+b; };

return addBlock(a,b);

}

@end

12 寻找下面代码中存在的bug,会出现什么错误,如何修复

@interface WaitController()

@property(strong, nonamtic) UILabel *alert;

@end

@implementation WaitController

- (void)viewDidLoad {

CGRect frame = CGRectMake(20,200,200,20);

self.alert = [[UILabel alloc] init];

self.alert.text = @"Please wait 10 seconds...";

self.alert.textColor = [UIColor whiteColor];

[self.view addSubview:self.alert];

NSOperationQueue *waitQueue = [[NSOperationQueue alloc] init];

[waitQueue addOperationWithBlock:^{

[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:10]];

self.alert.text = @"Thanks!";

}];

}

@end

子线程更新UI的方法

13 实现在Container View Controller 中添加和移除一个Child View Controller

- (void)addViewController:(UIViewController *)childViewController {

    [self addChildViewController:childViewController];

    childViewController.view.frame = CGRectMake(0, 44, 320, 320);

    [self.view addSubview:childViewController.view];

    [childViewController didMoveToParentViewController:self];

}

- (void)removeViewController:(UIViewController *)childViewController {

    [childViewController.view removeFromSuperview];

    [childViewController removeFromParentViewController];

}

14 分别用imageName和initWithContentsOfFile实现加载一张"logo png"的图片,简述这两种加载方式有什么不同,应用场景,以及优缺点.

15 对该数组内容去重,要求时间复杂度尽量低,若是要求去重并有序呢?

NSArray *array = @[@"1000",@"1000",@"1001",@"1002",@"1003",@"1004",@"1000",@"1005"];

答:采用字典存储数据!


面试部分

1 擅长那些,并讲述?

2 数据库处理? 

你可能感兴趣的:(笔试题)