zoukankan      html  css  js  c++  java
  • iOS 细节 问题

    1.当一个空指针(nil pointer)调用了一个方法会发生什么?

    安然无恙 —— 这是oc自带的消息机制,nil也能发送消息,而不会报错

    2.为什么retainCount绝对不能用在发布的代码中?请给出两个相对独立的解释。

     a,因为retainCount不靠谱,不能真实的反映一个对象的引用计数

    b,使用 alloc release等东西,一一对应,不需要retainCount

    c,app已然推荐ARC,连release都不用了,更何况retainCount

    -retainCount受到时间和framework的影响太大,不能准确反映内存的引用计数

    -retainCount很容易迷惑人,采取规范的内存管理才是王道

    3.查找或者解决内存泄露的处理过程推荐

     利用Xcode的工具,

    Analyze来看各种提示信息 (你可以在building setting里面开启各种烦人的提示)
    Profile跟进一些具体的内存的点

    跟进具体的代码,来看一些关键的点 block、delegate等

     使用instruments作为动态分析的手段,还有Xcode的静态内存分析

    4.自动回收池(autorelease pool)在程序运行时的运作过程。

    xcode为开发者写的代码外层包了一层NSAutoreleasePool。建立一个回收池堆栈(Stack)每次对象发送autorelease消息时,对象的引用计数并不真正变化,而是向pool中添加一条记录,记下对象的这种要求。最后当pool发送drain或release消息时,池中的所有对象的这种要求一一被执行。顺便说下使用场景:-应用不是基于"Application Kit",像"Command-line tool",因为它并没有内置的"autorelease pools"的支持。-创建线程,你必需在线程开始时创建一个'"Autorelease Pool"实例。反之,会造成内存池泄漏。一个循环内创建了太多的临时对象,你应该为他们创建一个"Autorelease Pool"对象,并在下次循环之前销毁它们。

    5.处理属性申明的时候,原子(atomic)跟 非原子(non-atomic)属性有什么区别?

     是否线程安全

    atomic是原子的,多线程的时候,可以防止写操作完毕前被读取

    事关多线程,原子(atomic)可以说是线程安全的,也就是在读取这个属性的变量的时候,会进行一些额外的操作(比如锁),所以说,atomic会比较安全但是比较耗时。

    6.遍历一个NSArray和一个NSSet,哪一个更快?

     其实意思是问,遍历一个链表和哈希表,哪个更快?

    如果你只需要保存和遍历一些数据,或者元素个数比较小,就选择NSArray, 即使需要查找的功能,也不要用NSSet.

    只有在元素个数很大,或者需要保证数据唯一性的情况下,才使用NSSet.

    7。copy跟retain有什么区别?

     一个是复制内容,一个引用计数+1,(NSString比较特殊,两个的功能几乎一样)需要注意的是,自定义的类需要重写一个方法以实现自己的深复制:

        -(id)copyWithZone:(NSZone *)Zone{

                   grandSuper *scCopy;

                  scCopy = [[[self class] allocWithZone:Zone]init];

                  return scCopy;

        }

    8.frames跟bounds有哪些区别?

    frame相对于superView而言
    bounds相对于自身的origin而言,一般是(0,0),设备朝向变化,bounds会变

    9.执行如下的代码会发生什么情况?

    Ball *ball = [[[[Ball alloc] init] autorelease] autorelease]; 

    崩溃,因为重复释放,在自动回收池下一次进行回收时崩溃

    10.app的崩溃率是多少?线上app出现问题如何解决:据说行业平均水平是 0.5%。分母是启动次数 (擦,这个我怎么知道,写得程序好,就崩得少,写的烂就崩的多呗,什么鸟崩溃率),刚得到一个 小的 方法:崩溃率的追踪用腾讯的bugly,解决用JSPatch。  好像有个 叫蒲公英的 网站 也可以 。

     11.IDE(Integrated Development Environment,集成开发环境)。其缩写形式IDE同时也代指“电子集成驱动器”。IDE集成开发环境(简称IDE)软件是用于程序开发环境的应用程序,一般包括代码编辑器编译器、调试器和图形用户界面工具。该程序可以独立运行,也可以和其它程序并用。例如,BASIC语言在微软办公软件中可以使用,可以在微软Word文档中编写WordBasic程序。IDE为用户使用Visual Basic、Java和PowerBuilder等现代编程语言提供了方便。IDE多被用于开发HTML应用软件

    12.回滚  

    回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。

    删除由一个或多个部分完成的事务执行的更新。为在应用程序、数据库或系统错误后还原数据库的完整性,需要使用回滚。

    对于 iOS 系统的回滚 就是 从高版本的系统 刷机到低版本的系统的意思

    待解决的:

     在C语言中,你如何能用尽可能短的时间来倒转一个字符串?

    解释代码签名(code signing)是如何运作的。

     Objective-C中的posing指的是什么? 

     列举标准Xcode版本中的6个工具。

    oc语言的缺点是什么

    如何检测 一个 app在手机所占内存的 大小  ,查看 CPU的消耗情况,如何查看app消耗流量和电量的情况

  • 相关阅读:
    Prometheus监控Mongodb副本集
    Mongodb的分片集群基本操作
    Prometheus修改数据保留时间
    Logstash修改UTC时间为东八区时间(北京时间)
    Prometheus 邮件告警自定义模板的触发时间为utc的解决方法
    MongoDB 分片片键如何选择
    MongoDB分片(Sharding)技术
    prometheus进程监控
    prometheus各种告警规则
    Alertmanager邮件告警
  • 原文地址:https://www.cnblogs.com/isItOk/p/4996350.html
Copyright © 2011-2022 走看看