iOS底层基础知识iOS面试知识点面试题

iOS面试进阶篇(三)

2019-03-14  本文已影响55人  路飞_Luck
目录
  • 网络七层协议
  • 深拷贝和浅拷贝
  • 对沙盒的理解
  • 响应者链的工作原理
  • property属性的修饰符的作用
  • 对于Run Loop的理解
  • 队列和多线程的使用原理
  • 内存的使用和优化的注意事项
  • UIViewController的完整生命周期
1.网络七层协议
2.对NSUserDefaults的理解

NSUserDefaults:系统提供的一种存储数据的方式,主要用于保存少量的数据,默认存储到library下的Preferences文件夹。

3.SDWebImage原理

调用类别的方法:

4.OC中是否有二维数组,如何实现二维数组?

OC中没有二维数组,可通过嵌套数组实现二维数组。

5.LayoutSubViews在什么时候被调用?

当View本身的frame改变时,会调用这个方法。

6.深拷贝和浅拷贝
image.png image.png
7.单例模式理解与使用
8.对沙盒的理解

每个iOS应用都被限制在“沙盒”中,沙盒相当于一个加了仅主人可见权限的文件夹,及时在应用程序安装过程中,系统为每个单独的应用程序生成它的主目录和一些关键的子目录。苹果对沙盒有几条限制:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).
9.对瀑布流的理解
10.ViewController 的 loadView、viewDidLoad、viewDidUnload 分别是在什么时候调用的?
11.关键字volatile有什么含意?并给出三个不同的例子:

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

12.@synthesize、@dynamic的理解
13.frame和bounds有什么不同?
14.view的touch事件有哪些?
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
15.自定义实现UITabbarController的原理

运用字典,点击五个按钮的一个可以从字典里选择一个控制器对象,将其View显示到主控制器视图上。

16.iOS中的响应者链的工作原理
16.View和View之间传值方式
17.property属性的修饰符的作用
18.对于Run Loop的理解
19.SQLite中常用的SQL语句
20.XIB与Storyboards的优缺点

优点:

缺点:

21 将字符串“2015-04-10”格式化日期转为NSDate类型
NSString *timeStr = @"2015-04-10";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd";
formatter.timeZone = [NSTimeZone defaultTimeZone];
NSDate *date = [formatter dateFromString:timeStr];
// 2015-04-09 16:00:00 +0000
NSLog(@"%@", date);
22.队列和多线程的使用原理

在iOS中队列分为以下几种:

dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t q = dispatch_queue_create("......",DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q = dispatch_get_main_queue();

更多细节见下图:

CCDB5630-115E-4554-A183-54B7AB0756D5.png
23.内存的使用和优化的注意事项
24.UIViewController的完整生命周期
-[ViewController initWithNibName:bundle:];
-[ViewController init];
-[ViewController loadView];
-[ViewController viewDidLoad];
-[ViewController viewWillDisappear:];
-[ViewController viewWillAppear:];
-[ViewController viewDidAppear:];
-[ViewController viewDidDisappear:];
25.UIImageView添加圆角
imgView.layer.cornerRadius = 10;
// 这一行代码是很消耗性能的
imgView.clipsToBounds = YES;
- (UIImage *)imageWithCornerRadius:(CGFloat)radius {
    CGRect rect = (CGRect){0.f, 0.f, self.size};
    
    UIGraphicsBeginImageContextWithOptions(self.size, NO, UIScreen.mainScreen.scale);
    CGContextAddPath(UIGraphicsGetCurrentContext(),
                     [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
    CGContextClip(UIGraphicsGetCurrentContext());
    
    [self drawInRect:rect];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return image;
}

相关文章链接
iOS面试进阶篇(一)
iOS面试进阶篇(二)


上一篇 下一篇

猜你喜欢

热点阅读