黑马程序员-----oc语言学习笔记之构造方法和分类

来源:互联网 发布:python ubuntu tts 编辑:程序博客网 时间:2024/06/06 21:54

------Java培训、Android培训、iOS培训、.Net培训期待与您交流! -------

一、构造方法
构造方法的定义:用来初始化对象实例变量值的方法,是个对象方法,-开头
重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值

构造方法的调用:创建一个完整的对象:Person *p=[Person new]
new方法会调用3个方法来完成
(1)使用alloc方法来分配存储空间(返回分配的对象)
Person *p = [Person alloc];
(2)使用init方法来对对象进行初始化。
Person *p = [p1 init];
(3)返回对象的首地址
总结可以整合成一句代替new
Person *p =[[Person alloc] init];

init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,以减号开头。默认初始化完毕后,所有成员变量的值都为0。
alloc 向某个类发送alloc消息的结果为该类分配内存,以存放该类的全部实例变量还将这块内存区域全部初始化为0
重写构造方法

官方重写构造方法 init如下

<span style="font-size:18px;">- (id) init{if(self = [super init]){//为子类增加属性进行初始化}return self;}</span>

1.super init 是先利用父类的init方法为子类实例的父类部分属性初始化
if语句判断[self = [super init]]
是为了防止父类的初始化release掉了self指向的空间,并重新alloc了一块空间
这时[super init]可能alloc失败,这时候就不要执行if中的语句了

<span style="font-size:18px;">例子#import<Foundation/foundation.h>@inerface Person :NSobject@property int age;@end@implementation Person-(id)init{if(self=[super init]){_age=10;}return self}@end@interface Student :Person@property int socer;@end@implementation Student-(id)init{if(self=[super init]){_socer=10;}return self}@endint main(){Student *p[[Student alloc] init];Nslog(@"%d,%d",p.age,p.socer);return 0;}</span>

构造方法使用注意
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候应该首先对从父类继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:
1)先调用父类的构造方法[super init];
2)再进行子类内部成员变量的初始化。


二、分类
分类的作用
1)在不修改原有类的基础上增加新的方法
2)可以让一个类分模块开发
3)一个大的类可以由多个人来编写,更有利于团队的合作

使用分类的目的
1) 对现有的类进行扩展
2)作为子类的代替手段
3)对一个庞大的类划分为小块来分别进行开发,从而对类的方法进行更新和维护

分类的声明格式
1) @interface 分类名 (现有的类名)
   分类添加的方法
    不允许在分类中添加成员变量 
    @end
分类的使用注意事项
1、分类只能增加方法,不能增加成员变量、@property.
2、分类可以访问原来类中的成员变量
3、分类和原来类出现同名的方法,优先调用分类中的方法,原先类中的方法会被忽略

分类的例子#import <Foundation/foundation.h>@interface Person : NSObject@property int age;@property int weight;-(void)eat;@end@implementation Person-(void)eat{_weight=_weight+1;Nslog(@"the person weight add");}@end@interface Person(study)-(void)study;-(void)run;@end@implementation Person(study)-(void)study{NSlog(@"xunxi");}-(void)run{NSlog(@"runing");}@endint main(){Person *p=[[Person alloc]init];[p eat];[p study];[p run];}



0 0