李洪强经典面试题18

论坛 期权论坛     
选择匿名的用户   2021-5-30 22:34   87   0
<div class="blogpost-body" id="cnblogs_post_body">
<div class="blog_title">
  <h3><a href="http://zhangmingwei.iteye.com/blog/1748431"> </a></h3>
  <strong><br></strong>
</div>
<div class="blog_content" id="blog_content">
  <div class="iteye-blog-content-contain">
   <p> </p>
   <p> </p>
   <p class="p1"> </p>
   <p class="p1"> </p>
   <p class="p1">多线程、特别是NSOperation 和 GCD 的内部原理。</p>
   <p class="p1">运行时机制的原理和运用场景。</p>
   <p class="p1">SDWebImage的原理。实现机制。如何解决TableView卡的问题。</p>
   <p class="p1">block和代理的,通知的区别。block的用法需要注意些什么。</p>
   <p class="p1">strong,weak,retain,assign,copy nomatic 等的区别。</p>
   <p class="p1">设计模式,mvc,单利,工厂,代理等的应用场景。</p>
   <p class="p1">单利的写法。在单利中创建数组应该注意些什么。</p>
   <p class="p1">NSString 的时候用copy和strong的区别。</p>
   <p class="p1">响应值链。</p>
   <p class="p1">NSTimer 在子线程中应该手动创建NSRunLoop ,否则不能循环执行。</p>
   <p class="p1">UIScrollView和NSTimer组合做循环广告图轮播的时候有一个属性可以控制当上下滚动tableview的时候广告轮播图依然正常滚动。</p>
   <p class="p1">Xcode最新的自动布局。。。这个很多公司都用。尽量自学下。</p>
   <p class="p1">git ,和svn的用法。。。git的几个命令简单的记下。。。</p>
   <p class="p1">友盟报错可以查到具体某一行的错误,原理是什么。</p>
   <p class="p1">Instrument  可以检测 电池的耗电量、和内存的消耗。的用法。</p>
   <p class="p1">动画CABaseAnimation CAKeyAni….  CATrans…..  CAGoup….    等熟悉。。</p>
   <p class="p1">ARC的原理。</p>
   <p class="p1">自己写过什么自定义控件就最好了。。</p>
   <p> </p>
   <p class="p1">———————————————回答好上面的足够了-------------------------------------</p>
   <p> </p>
   <p>__block和__weak修饰符的区别其实是挺明显的: </p>
   <p>1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。 <br>2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。 <br>3.__block对象可以在block中被重新赋值,__weak不可以。 </p>
   <p> </p>
   <p> tableView 滑动卡的问题主要是因为:从缓存中或者是从本地读取图片给UIImage的时候耗费的时间。需要把下面的两句话放到子线程里面:</p>
   <ol class="dp-objc list-paddingleft-2"><li><span class="keyword">NSData *imgData &#61; [NSData<span class="vars"> dataWithContentsOfURL:[NSURL<span class="vars"> URLWithString:app.icon]]; <span class="comment">//得到图像数据  </span></span></span></span></li><li class="alt">        <span class="keyword">UIImage *image &#61; [UIImage<span class="vars"> imageWithData:imgData];  </span></span></li></ol>
   <p> </p>
   <p>把UIImage赋值给图片的时候在主线程。</p>
   <p>子线程不能更新UI 所有的UI跟新都是主线程执行了。手指滑动屏幕了。或者屏幕的某个方法执行了。</p>
   <p> </p>
   <p>子线程里面加入NSTimer 的时候需要 手动添加NSRunloop   否则不能循环。</p>
   <p> </p>
   <p>单利里面添加 NSMutableArray 的时候,防止多个地方对它同时便利和修改的话,需要加原子属性。并且用strong,,,并且写一个遍历和修改的方法。加上锁。   Lock   UnLock    </p>
   <p> </p>
   <p>    __weak ViewController*  weakSelf &#61; self;</p>
   <p>GCD里面用 __weak 防止内存释放不了,循环引用。</p>
   <p> </p>
   <p> </p>
   <p> </p>
   <p> 二、SDWebImage内部实现过程</p>
   <ol class="list-paddingleft-2"><li> <p>入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。</p> </li><li> <p>进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.</p> </li><li> <p>先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。</p> </li><li> <p>SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView&#43;WebCache 等前端展示图片。</p> </li><li> <p>如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。</p> </li><li> <p>根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。</p> </li><li> <p>如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。进
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP