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 数据库处理?