zoukankan      html  css  js  c++  java
  • 面试题(二十)

    一.哪些情况出现循环引用
    计时器NSTimer:外部暴露清理定时器的方法
    blcok: 使用copy,即使在你的block代码中没有显式地出现"self",也会出现循环引用!只要你在block里用到了self所拥有的东西
    委托delegate:出现循环引用问题

    二.多线程的使用
    NSThread、NSOperation、GCD

    三.资源竞争,加锁
    @synchronized
    NSLock
    NSRecursiveLock,递归锁
    NSConditionLock,条件锁
    NSDistributedLock,分布锁
    dispatch_semaphore
    os_unfair_lock
    OSSpinLock
    POSIX Conditions
    pthread_rwlock
    pthread_mutex

    四.UITableView 的优化
    数据源方法优化
    定义一种(尽量少)类型的Cell
    善用hidden隐藏(显示)subviews
    提前计算并缓存Cell的高度
    定高的cell,应该采用如下方式:
    self.tableView.rowHeight = 88;//不再实现delegate 返回行高代理方法
    动态行高:self.myTableView.estimatedRowHeight = 44.0;
        self.myTableView.rowHeight = UITableViewAutomaticDimension;
    异步绘制(自定义Cell绘制)
    滑动时,按需加载
    避免大量的图片缩放、颜色渐变等,尽量显示“大小刚好合适的图片资源”
    缓存View
    避免同步的从网络、文件获取数据,Cell内实现的内容来自web,使用异步加载,缓存请求结果
    减少subviews的个数和层级少用subviews的透明图层
    避免CALayer特效(shadowPath)

    五.UITableView不固定行高的几种实现方式
    六.为什么block要用copy修饰,使用assign/weak,strong,retain修饰有什么问题,编译时,运行时会报错么
    block从本身在堆区,而是让block在堆区自动管理
    block是存档在栈中,可能被随时回收,通过copy操作可以使其在堆中保留一份, 相当于一直强引用着, 因此如果block中用到self时, 需要将其弱化, 通过__weak或者__unsafe_unretained.
    使用 assign修饰时编译可以通过,但是运行时会crash,因为block使用的weak修饰,block存在于栈中,self又保存在block中,所以self也再栈里面,当执行完_block()之后,block就马上把自己释放掉了,从而self也一同没了。然后这句话缺没有完,在这个语法块里面还有self等一些列语句的时候他又会马上回调到b类去改变颜色。  
    转移成汇编代码的话他就会把self当做一个地址,然后call回去继续执行。但是这个时候self已经被释放掉了,当再次call回去的时候他的函数表里面已经没有任何东西了,函数名比较就通不过,让系统认为没有这个可执行的函数,则编译无法继续执行。
    使用strong/retain 编译,运行都不会出现问题,但是有可能会出现循环引用问题,内存泄漏
    七.nsstring 使用什么修饰符,为什么要使用这个修饰符

    八.Block内部修改变量需要注意的事项
    九.没有bug分析统计,客户反馈crash,怎么处理
    首先问客户机型、系统版本号,让测试人员重现
    十.Swift函数式编程的特性,filter,map实现的原理
    十一.ReactNative的优点,为什么比别的混合技术性能要高
    十二.ReactiveCocoa实现的通信方式,特点
    十三.设计模式:MVC, MVVM, MVP, VIPER 区别与优缺点
    十四.属性的修饰符有哪些,什么情况使用哪种
    十五.分类category添加属性,调用了runtime的什么方法实现的
    十六.看过哪些源码
    十七.UICollectionView的优化

  • 相关阅读:
    cloudstack secondary vm starting
    什么东西有机会
    ansible 远程以普通用户执行命令
    python 爬虫--同花顺-使用代理
    python3 Beautifulsoup <class 'bs4.element.ResultSet'> <class 'bs4.element.Tag'> 取值
    python3 raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbid
    kubernetes 生命周期问题分析
    'utf-8' codec can't decode byte 0xbc in position 1182: invalid start byte
    找回Firefox4的状态栏!Status-4-Evar扩展
    生命周期和Zend引擎
  • 原文地址:https://www.cnblogs.com/shidaying/p/8136327.html
Copyright © 2011-2022 走看看