iOS高频面试题(持续更新)

1、ARC和MRC管理内存有什么不同,iOS中内存管理的原理

2、assign和weak的区别,解释一下strong、copy关键词的作用

3、简述一下retain cycle的例子以及如何避免引用循环,顺便设计一下可避免引用循环的timer

4、列举一下iOS中加锁方式,他们的区别是什么

5、在iOS中实现多线程有几种方式?并解释每种方式的优缺点

6、什么是KVC、KVO?KVO实现的原理是什么?

7、如何优化UITableView?列举一下UITableView的优化点。

8、一次完整的http请求都经过哪些环节?并简述https的工作流程

9、你使用过哪些第三方类库?是做什么的?

10、举例说明CocoaTouch中使用过的设计模式?

11、#define DOUBLE(x) x+x      int i = 5 * DOUBLE(5)  i是多少?

12、layoutSubviews、layoutIfNeeded、setNeedsLayout、setNeedsDisplay、drawRect、sizeThatFits、sizeToFit这些方法的调用时机

13、Category、block底层原理

14、autorelease原理及时机

15、runtime、runloop(这两个居然忘写了😓)

16、gcd全家桶

17、今天看block的内容学习,突然想到一个问题,如下:

```

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

        Person *p = [[Person alloc] init];

        __weak Person *weakP = p;       

      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{ NSLog(@"1-------%@", p);                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{ NSLog(@"2-------%@", weakP); });

        });       

        NSLog(@"touchesBegan:withEvent:");

}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

        Person *p = [[Person alloc] init]; __weak Person *weakP = p;        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{ NSLog(@"1-------%@", weakP);                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{ NSLog(@"2-------%@", p); });

        });       

        NSLog(@"touchesBegan:withEvent:");

}

```

猜一猜输出结果是什么样的,想想原因

18、今天(20181029)想到一个问题,int i=10;  i++ + i++ + ++i=?这个等于多少呢?不同的编译器会不会不同?想一想

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。