黑马程序员——点语法、description、SEL、id使用

黑马程序员——点语法、description、SEL、id使用

 

点语法介绍与使用

**p.age;**

对象.属性名

注意:此时,(对象.属性名)并不是直接访问实例变量。而是看到点语法后,会帮我们自动替换成p.age=18-替换->  [p setAge:18];

*************************

int a=p.age;//调用get方法

注意:当看到p.age出现在等号右侧的时候,会自动替换成p.age--替换-->[p age];

 

强调:p.age到底是替换成get还是set方法,一般取决于p.age出现在等号左侧还是右侧(是设置值还是赋值)

 

死循环:

set方法:

- (void) setAge:(int)newAge {

    // 下面的代码会引发死循环

    self.age = newAge;

}

相当于

- (void) setAge:(int)newAge {

    [self setAge:newAge];

}

死循环:

在get方法中,return self.age相当于[self age];

********************************

description方法介绍及重写

当以%@的格式,打印对象或类,此时调用了对象的description方法。对象中如果没有重写父类的description方法,则调用父类的

********************************

SEL 方法的存储位置

 是对方法的包装,包装成SEL类型数据

 根据SEL数据找到对应的方法地址

 根据方法地址调用相应的方法

例:把test方法包装成SEL类型

SEL s1 = @selector(test);

使用:

[p performSelector:test];

*********************************

强制类型转换例:

NSObject *obj=[Animal new];

[(Animal*)obj run];

[(子类名*)指针名 行为]

*********************************

id使用:

不需要强制类型转换,可直接使用,认为是动态类型,编译器在检查类型。

id obj;

obj=dog;

[obj run]

相当于NSObject *

 

instancetype与id

相同:都可以作为方法的返回类型

不同:

  instancetype可以返回和方法类型相同的对象。id只能返回未知类型的对象

  instancetype只能作为返回值,id还可以作为参数

 

posted @ 2015-10-27 16:03  gaozp  阅读(330)  评论(0编辑  收藏  举报