IOS阶段学习第12天札记(类的初始化)

IOS阶段学习第12天笔记(类的初始化)

IOS学习(OC语言)知识点整理

一、类的初始化
1)init初始化方法(构造方法):一般和alloc一起调用,用于给成员变量初始化。
2)id类型:相当于C中的void*,可以指向任何对象,不能加*,类似.net或java中的泛型。
3)带参的初始化方法(自定义的初始化方法),是实例方法,必须以initWith开头 。
      例如:-(id)initWithName:(NSString*)name andPrice:(float)price andPage:(int)page;
                  Book *b3=[[Book alloc]initWithName:@"iOS开发"  andPrice:100 andPage:600];
4)初始化类时需要判断父类对象是否已经初始化成功只有当父类对象初始化成功了才可以给类成员赋值。
     初始化方法三步原则:
    1)调用父类的init方法。
    2)初始化自己的成员变量。
    3)返回self 对象。
 实例代码:

 1  -(id)init
 2 {
 3     //调用父类的方法初始化从父类中继承的成员变量
 4     //super实际上是一个编译器符号,表示调用父类的方法
 5     self=[super init];
 6     if(self!=nil){  //nil相当于c中的NULL,如果父类初始化成功,才可 以继续操作(实现成员变量的初始化)
 7         _name=@"myBook";
 8         _page=300;
 9         _price=50;
10     }
11     return self;//返回当前对象
12 }

5)点语法的介绍,点语法本质是一个方法的调用;点语法调用的方法一般只能是一个参数的实例方法。
6)@property声明属性,会自动生成对应属性的set,get方法 ; 功能相当于以下2个方法的声明
  1、-(void)setName:(NSString *)setname;
  2、-(NSString *)getname;
7)self的说明,如果是在实例方法中self代表当前调用此方法的实例对象,如果是在类方法中self代表当前所在类的类对象。
8)@synthesize合成方法体  会自动生成property所对应元素的方法体,@synthesize name =_name;表明方法是操作成员变量_name,

     如果_name不存在, 会自动创建一个 成员变量_name;如果要使用@synthesize,必须有@property; 但有@property 可以没有@synthesize。

9)@property 可以同时声明同种数据类型的多个属性;例如:@property(nonatomic,assign)int age,ID。
10)@property的修饰符介绍:
  1、readonly:只读,只生成getter方法,没有setter方法
  2、 readwrite:可读写,会生成setter和getter方法,默认是readwrite
  3、nonatomic:不需要考虑数据同步,单线程应用程序中效率较高
  4、atomic:需要考虑线程同步,效率低,默认是这种
       与内存管理有关:
  5、assign:直接赋值,一般用于int、float、double、long等基本类型
  6、retain:一般用于对象
  7、copy:一般用于字符串
  8、默认是readwrite、atomic、assign

二、继承

1)子类继承父类:会继承父类中所有的成员变量(包括私有的)和方法,还可以增加自己特有的成员。

2)当父类的方法不适合子类,可以对其方法进行重写,重写需要方法和父类中的方法名完全一样。

3)当两个类有很多相同的属性和方法时,可以将相同的部分提取出来构成父类,让这两个类继承父类

 当父类的功能不能满足需求时,可以考虑继承父类创建子类

 继承的好处:可以表示类与类之间的关系,可以统一接口.

 缺点是:耦合性太强。

 如果类A完全拥有类B的部分属性和方法时,可以考虑类B继承类A,也可以考虑组合。

4)super关键字的介绍:

 1、super实际上是一个编译器符号,用于调用父类的方法

 2、当子类重写父类的方法,同时又想保留父类的功能时,可以用super调用

 3、super处在类方法中,自动调用父类的类方法,处在实例方法中,自动调用父类的实例方法