《iOS编程》读书笔记

来源:互联网 发布:mac 菜单栏 编辑:程序博客网 时间:2024/06/08 05:49

第2章 Objective-C

1.消息和方法的区别:方法是指一块可以执行的代码,而消息是指要求类或对象执行某个方法的动作;
2.消息的名称和将要执行的方法的名称一定是相同的;
3.在OC中,方法的唯一性取决于方法名。因此,即使参数类型或返回类型不同,一个类也不能有两个名称相同的方法;
4.OC允许向某个值为nil的变量发送消息,且不会发生任何事情,在其他语言中,向空指针发送消息是非法的;
5.instancetype只能用来表示方法返回类型,但id还可以用来表示变量和方法参数的类型;
6.在初始化方法中,应该直接访问实例变量,而不是使用存取方法;
7.数组对象(NSArray与NSMutableArray)只能保存指向OC对象的指针,不能将基本类型的变量或C结构加入数组对象。可以将它们包装成OC对象,如NSNumber, NSValue和NSData;
8.不能将nil加入数组对象,但可以加入NSNull对象;

第3章 通过ARC管理内存

1.对象所有权:
(1)当某个方法(或函数)有一个指向某个对象的局部变量时,可以称该变量拥有(own)该变量所指向的对象;
(2)当某个对象有一个指向其他对象的实例变量时,可以称该对象拥有该实例变量所指向的对象。

2.哪种情况会使对象失去拥有者:
(1)当程序修改某个指向特定对象的变量并将其指向另一个对象时;
(2)当程序将某个指向特定对象的变量设置为nil时;
(3)当程序释放对象的某个拥有者时;
(4)当从collection类中(例如数组)删除对象时。

3.属性的特性:
(1)nonatomic和atomic,atomic为原子操作,多线程安全,而nonatomic则不是,默认为atomic;
(2)readwrite和readonly,顾名思义,不解释了,readonly类型只会生成取方法,默认为readwrite;
(3)内存管理特性:strong, weak, copy, unsafe_unretained.详见下面;

4.属性的内存管理特性:
(1)对于不指向任何对象的属性(如int),不需要内存管理,应使用unsafe_unretained,他表示存取方法会直接为实例变量赋值。Apple引入ARC之前曾经使用assign表示这种类型;
(2)unsafe_unretained类型的指针指向的对象为销毁时,指针不会自动设置为nil, 而是成为空指针,因此不安全;但当处理非对象属性时,时不会出现空指针问题的;
(3)unsafe_unretained是非对象属性的默认值;
(4)对于指向OC对象的属性,默认是strong类型;
(5)当某个属性是指向其他对象的指针,而且该对象的类有可修改的子类时(例如NSString/NSMutableString)时,应该讲该属性的内存管理特性设置为copy;

第4章

1.任何一个应用都有且只有一个UIWindow对象,他就像一个容器,负责包含应用中所有的视图;
2.为什么Core Graphic类型都带Ref后缀:Core Graphic结构体和OC对象都是在堆上分配内存,使用这种分配方式的C结构都有一个用来表示结构指针(结构名加)的类型定义,如CGColor结构不直接使用CGColor,而是使用CGColorRef;

第6章

1.File’Owner的理解,详见226页;
2.将插座变量声明为弱引用是一种编程约定。当系统的可用内存偏小是,试图控制器会自动释放其视图并在之后需要显示时再创建;
3.viewDidLoad和viewWillAppear方法,详见第242页;

原创粉丝点击