面试题整理

3.  __block在arc和非arc下含义一样吗?

是不一样的。

在MRC中block variable在block中使用是不會retain的

但是ARC中block則是會Retain的。

取而代之的是用weak或是unsafe_unretained來更精確的描述weak reference的目的

其中前者只能在iOS5之後可以使用,但是比較好 (該物件release之後,此pointer會自動設成nil)

而後者是ARC的環境下為了相容4.x的解決方案。

所以上面的範例中

__block MyClass* temp = …;// MRC環境下使用

__weak MyClass* temp = …;// ARC但只支援iOS5.0以上的版本

__unsafe_retained MyClass* temp = …;//ARC且可以相容4.x以後的版本


5. 描述一个你遇到过的retain cycle例子。(别撒谎,你肯定遇到过)

self.completionHandler = ^{

// 有 retain block,直接用 self 會造成 retain cycle

NSLog(@"%@", self);

}

MyViewController *myController = [[MyViewController alloc] init...];

[self presentViewController:myController animated:YES completion:self.completionHandler];

當有 retain block 時,應該使用 weakSelf

__weak typeof(self) weakSelf = self;

self.completionHandler = ^{

// 打破 retain cycle

NSLog(@"%@", weakSelf);

};

MyViewController *myController = [[MyViewController alloc] init...];

[self presentViewController:myController animated:YES completion:self.completionHandler];


11. 使用drawRect有什么影响?(这个可深可浅,你至少得用过。。)

12. ASIHttpRequest或者SDWebImage里面给UIImageView加载图片的逻辑是什么样的?(把UIImageView放到UITableViewCell里面问更赞)

13. 麻烦你设计个简单的图片内存缓存器(移除策略是一定要说的)

14. 讲讲你用Instrument优化动画性能的经历吧(别问我什么是Instrument)

15. loadView是干嘛用的?

16. viewWillLayoutSubView你总是知道的。。

17. GCD里面有哪几种Queue?你自己建立过串行queue吗?背后的线程模型是什么样的?

18. 用过coredata或者sqlite吗?读写是分线程的吗?遇到过死锁没?咋解决的?

19. http的post和get啥区别?(区别挺多的,麻烦多说点)

20. 我知道你大学毕业过后就没接触过算法数据结构了,但是请你一定告诉我什么是Binary search tree?  search的时间复杂度是多少?我很想知道!

你可能感兴趣的:(面试题整理)