美文网首页
微专业GeekBand-Objective-C笔记 -- 第一周

微专业GeekBand-Objective-C笔记 -- 第一周

作者: OneRice | 来源:发表于2016-03-05 20:45 被阅读0次

    总结:

    类class与对象instance(实例):

    如果“书本”是一个类型,那么《一本书》可以是“书本”的一个对象,而《第二本书》可以是“书本”的另一个对象

    Book *book1 = [[Book] alloc] init] <-- 这里就是说 book1 是 类型 Book 的一个对象

    类与结构

    两者不一样,类的实例是将堆里面的数据的指针储存在栈上,结构是直接将值存储在栈上。

    这也就造成拷贝与传参的不同

    这就使得对于拷贝(这里的拷贝指的是直接用“=”,和(copy)不一样)与传参后的类的改变也会在原本的类中出现(在rp2中的更改会对rp1有影响),但是结构不会

    类型中的数据成员:

    在类型中主要有属性和实例变量两种数据成员,编译器会默认为一个属性合成一个getter,setter以及一个"_属性名字"的实例变量。

    类外一律通过属性访问,且不可以访问实例变量,可以通过 [实例 访问器方法] (发讯息)的方式获得,也可以直接 ”实例.属性" 来获得

    除了实例里可以有属性之外,类本身也可以有static的变量

    循环引用和拷贝属性(copy)&(weak)

    为了避免循环引用造成无法释放内存,可以使用(weak)。为了获得一个独立的的拷贝,可以使用(copy)

    类型中的函数成员:

    方法主要分为实例方法与类方法,实例方法用"-"减号表示,类方方法"+"表示。类型方法不可以访问实例的成员(实例的属性,变量,方法)

    self在不同情况下会有不同的作用

    实例方法与类方法的长相

    特殊的方法有alloc,init,dealloc等

    初始化器和析构器的解释 自定义和带有参数的实例初始化器

    注意:自定义的initialize类初始化器中应当包含 if(self==[类名 class]){ ... } 以避免调用多次。自定义的dealloc不需要有[super dealloc],编译器自动后置调用。

    继承和多态:

    子类可以通过 " 子类名称 : 父类名称 " 例如 " Shape : NSObject " 这种方式来继承父类的变量,属性,方法等。而且可以在接受父类实例的行为里面使用 (例如 void process(Shape*shape){...} 就可以接受 Shape 的子类。

    在子类型中,可以重写 Override 父类的方法,以达到不同的效果。重点:在父类方法A中调用另外一个方法B,如果这个方法B在子类中重写了,那么就会变成子类的方法B,而不是父类的。

    注意:因为上述的这种特性,所以应当在父类的init、dealloc方法中避免使用self

    实例方法看的是实际类型,和申明类型无关。但是类方法不一样,看的是类方法的类。

    super可以用来调用基类的实现

    相关文章

      网友评论

          本文标题:微专业GeekBand-Objective-C笔记 -- 第一周

          本文链接:https://www.haomeiwen.com/subject/zwtakttx.html