其他分享
首页 > 其他分享> > iOS问答篇 - 知道-----------------------------------------

iOS问答篇 - 知道-----------------------------------------

作者:互联网

1 - 面向对象是 90 年代软件开发方法的主流,是一种设计思路,它已经扩展到很宽的范围,如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、人工智能、CAD技术等领域

2 - 初始化方法命名一般是以 init 开头,其返回值只能是 id 类型或本类对象,不能是 void。一个类可以有多种初始化方法但有且只有一个指定的初始化方法

3 - 单例模式是一种软件设计模式,在使用时,单例对象的类必须保证只有一个实例存在。它的思路是:一个类只能返回对象的一个引用(永远是同一个)和一个获得该实例的方法

4 - SEL 只是方法编号;IMP 是一个函数指针,保存了方法的地址。每一个继承于 NSObject 的类都能自动获得 runtime 的支持。在一个类中有一个 isa 指针,指向该类定义的数据结构体,在这个结构体中包括了指向其父类的指针以及 Dispatch table,Dispatch table 是一张 SEL 和 IMP 的对应表,就是说方法编号 SEL 最后还是要通过 Dispatch table 表寻找到对应的 IMP,IMP 就是一个函数指针,然后执行这个方法

5 - 野指针:对象被回收,但仍有指针指向这块内存

6 - 程序崩溃的原因,内存问题占了 90%+,主要表现为:野指针异常、内存溢出

7 - 直接赋值(assign):适用于基本数据类型,包括结构体和枚举

   引用赋值(持有赋值):适用于源对象和被赋值对象需要同时修改的时候

   拷贝赋值:适用于源对象不受影响,而被赋值对象需要修改的时候

8 - OC 可以使用 GCC 和 Clang 编译器进行编译

9 - OC 语言的应用环境:(1)iOS 应用程序/系统(2)Mac OS X 应用程序/系统

10 -  block 相关

① block 是 C语言的扩充功能,一句话准确概括:带有自动变量值(局部变量)的匿名函数(带有自动变量值在 block 中表现为截获自动变量的值)

②  block 类型变量和一般的 C语言变量完全相同,可以作以下用途:(1)自动变量(2)函数参数(3)静态变量(4)静态全局变量(5)全局变量

③  block 不管配置在何处(堆、栈或者全局),使用 copy 方法都不会引起任何问题,在不确定时调用 copy 即可

④ 在 ARC 模式下,编译器不能自行把 block 优化到堆区的状况

(1)向方法或函数的参数中传递 block 时(方法或函数不需要手动复制 block,编译器自动将 block 分配到堆区)

(2)cocoa 框架的方法且方法名中含有 usingBlock 等时,例如在使用 NSArray 类的 enumerateObjectsUsingBlock 实例方法以及 dispatch_async 函数时

(3)GCD 的 API 

(4)将 block 赋值给附有 __strong 修饰符 id 类型的类或 block 类型成员变量时

(5)block 作为函数的返回值返回时

11 -  ARC 机制下,可以使在栈上分配的指针隐式的初始化为 nil,如下

1  - (void)myMethod{
2       NSString *name;// 野指针
3       NSLog(@"name is %@",name);// 在 ARC 模式下,程序运行会打印出 name:NULL,而 MRC 模式会使程序崩溃
4 }

12 - 同步和异步的区别之一就是:同步在当前线程中执行,不具备开启新线程的能力;异步在另一条线程中执行,具备开启新线程的能力

 

标签:name,问答,iOS,方法,线程,指针,-----------------------------------------,block,赋值
来源: https://www.cnblogs.com/self-epoch/p/16037312.html