您的位置:首页 > 职场人生

黑马程序员-- ID init(构造方法) Class NSLog description SEL

2015-10-17 13:40 281 查看
一、、id(类型)

1. id是万能指针,能操作任何OC对象

2. id相当于NSObject *

3. id d=[Person new]; [d,setAge:10]

4. id后面不要加*

二、构造方法(用来初始化对象的方法,是个对象方法,以开头)

1. Person *p=[Person new]; //完整的创建一个可用的对象

(1)分配存储空间(+alloc方法)

(2)初始化 (- init方法)

new方法做的事情

(1)调用+alloc方法,分配存储空间 Person *p1=[Person alloc];

(2)调用- init
方法,进行初始化(初始化完毕,默认为0) Person *p2=[p1 init];

Person *p=[Person new];
就相当于Person *p3=[ [ Person alloc ] init ];

2. init 就是构造方法

3. 任何对象构造之前首先要调用父类的构造方法(init)

4. 若想某个对象一创建出来,它的成员变量就是某个值(10),就重写构造方法(重写init)

-(id)init

{

if(self=[super init]) //先调回super的init方法,如果对象初始化成功

{

_age=10 //赋值

}

return self; //返回初始化完毕的对象

}

5. 重写构造方法的步骤:(1)调用父类的构造方法,初始化父类([super
init])

(2)在进行子类内部成员变量的初始化

6. 自定义构造方法

规范:(1)一定是对象方法,以 -
开头

(2)返回值一般都是id类型

(3)方法名一般以initwith开头

-(id)initwithName:(NSString*)name

{

if(self=[super init]) //先调回super的init方法,如果对象初始化成功

{

_name=name //赋值

}

return self; //返回初始化完毕的对象

}

三、分类(Category)(给类扩充一些方法)

1. 格式

分类的声明:@interface
类名(分类名称) @end

分类的实现:@implementation
类名(分类名称) @end

2. 作用:不改变原来类的内容的基础上为类增加一些新的方法

3. 注意点:

(1)分类只能增加方法,不能增加成员变量

(2)分类的实现里面可以增加成员变量

(3)分类可是重新实现原来类中的方法,但是会覆盖原来的方法,导致原来的方法不可再用

(4)分类方法优先去分类中找,然后再去原来的类中找,最后再去父类中找(优先级:分类->原来类->父类)

七、类的深入探究

1. 类也是一个Class类型的对象,简称类对象,类名就是类对象

2. Class创建Person类对象,再利用Person类对象创建Person类型的对象

3. 可以利用类对象调用类方法

4. 程序启动时,加载项目中所有类,先加载父类再加载子类,类加载完毕之后会调用类和分类的+(void)load方法(仅一次)

加载顺序:父类,子类,分类

5. 当第一次使用这个类的时候就会调用一次+(void)initialize方法(初始化)

先初始化父类,再初始化子类

//todo 类但加载顺序

四、description方法(对象方法)

1. 默认情况下,利用NSLog和%@输出对象时,结果是<类名:对象地址>

2. 利用NSLog和%@输出对象时,会调用对象的-description方法,description方法的返回值是(NSString*)

3. 若想将对象的属性值(age=10,name="jack")打印出来,可以重写description方法

-(NSString *)description

{

return [ NSString stringwithFormat : @"age is %d , name=%@" , _age , _name ];

}

*注意点:不能在-description方法中使用NSLog打印self(死循环)

4. 利用NSLog和%@输出类对象时,结果为类名,因为调用的是+description方法(类方法)

五、NSLog输出

1. NSLog(@"%p",&p) //
指针变量的地址

NSLog(@"%p",p) //
对象的地址

NSLog(@"%@",p) // <类名:对象地址>

NSLog(@"%d",_ _LINE_ _) //
输出当前行号

NSLog(@"%s",_ _FILE_ _) //
输出文件路径

NSLog(@"%s\n",_ _func_ _) //输出所在函数名

2. NSLog输出语言字符串的时候,不能有中文

六、SEL

1. SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址,就可以调用方法

2. 每个类的方法列表都存储在类对象中,每个方法都有一个与之对应的SEL类型的对象,根据一个SEL对象就可以找到方法的地
址,进而调用方法

3. SEL对象的创建

SEL s=@selector(test); //将test方法包装成一个SEL类型的数据

SEL s2=NSSelectorFromstring(@"test"); //将test这个字符串包装成一个SEL类型的数据

4. SEL对象的其他用法

//将SEL对象转为NSString对象

NSString*str=NSStringFormSelector(@selector(test));

Person *p=[Person new];

//调用对象p的test方法

[p performSelector:@selector(test)];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: