个人认为本周所讲的知识点的难度较上周有很大提高,虽然只有五节课,每节课的时长也不多,但是作业做起来问题不断,真是难熬的一周!
下面把我在课上听到的自认为重要的知识点记录下来,分享和参考:
【集合】部分:三个重点
I. NSArray/NSSet/NSLibrary(父类) -->NSMutable...(子类):会出现偷换指针的漏洞,需要切切注意。
II. 尽量使用快速枚举方法,迭代器甚至是for循环的效率很低。
III.可变容器内存的增长方式
另外:一个number不可以直接放在NSArray中,必须封装为对象类型。
在内存模型上,栈上的数组指向堆上的一块内存,而每个元素指向同一个新的对象。堆上的对象不能指向栈上,因为栈的生存周期较短(每个栈在函数结束之后即消失),因此只能是堆上的对象指向堆上,故NSNumber被封装成对象类型。
【ARC】部分的重点
ARC结合属性之后,一旦指针回指对象,会形成循环引用,如果出现这种情况,要在attribute上加一个weak,构成一个弱引用,以解决这个问题。
【协议】部分
协议可包含的成员:
(常用)属性、实例方法、类方法
(罕见)初始化器、析构器
(不可)实例变量成员 <=[协议中定义的属性本质上是访问器方法]
协议的本质是一个不能创建实例的声明类型。
常用的协议需要了解。
【类别与扩展】
类别:我认为类别的主要任务就是把XCode自己包含的类(或者一些不知道源代码的)进行一下功能上的扩充。譬如作业中,对数组的一个扩充,以实现一些没有的功能。 可以添加的包括:类方法、实例方法或者重写基类方法,而属性、实例变量和重名的就不行了。 同时,命名也需要有一定的规范,即一些约定俗成的东西还是不要个性的为好。
扩展的话,也是增加功能,并且可以添加、改写属性,但只能类内访问,这也是和类别恰恰相反的地方。
类别的缺点(摘抄):
类别乍一看像是一个类的子类,其实类别还是有一定的局限性,当在Category中覆盖一个继承的方法,在Category中的方法可以通过向super类发送一个消息来调用被继承的方法。但是,如果 Category中覆盖的那个方法已经在这个类的其它Category定义过了,则之前定义的方法将没有机会被程序调用 ,在Category中无法确定其能够可靠的覆盖某个方法,而这个方法已经在其它的Category中定义过。这个问题在使用Cocoa框架时尤其突出。 当你想覆盖某个框架已经定义好的方法时,该方法已经在其它Category中实现,这样就无法确定哪个定义和实现会被最先使用,带来很大的不确定性。
如果你重新覆盖定义了一些方法,往往会导致这个方法在整个框架中实现发生了变化。举例来说,如果你增加了NSObject中windowWillClose:的实现,这会导致所有的窗口调用那个新实现的方法,从而改变所有NSWindows实例的行为。这会带来很多不确定性,并很有可能导致程序的崩溃。
本周的课有点吃力,说实话,很多东西都没有彻底消化,欠账也很多。归根结蒂还是自己的努力不够,同时批到了同学的作业和心得笔记,发现自己的差距和那些认真努力的同学很大,今后要以他们为榜样,格物致知,努力学习,把之前欠下来的补上,并且追上进度,创造更大的成绩!