黑马程序员----对象初始化 SEL

来源:互联网 发布:大庆自行车软件 编辑:程序博客网 时间:2024/05/22 03:37

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

对象初始化

重写init方法

- (id)init{    if ( self = [super init] )    { // 初始化成功        //成员初始化    }    // 3.返回一个已经初始化完毕的对象    return self;}

可以自己构造适合类的构造方法[instance initWithData1:...Data2:..]

分类categroy

分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法

使用注意:
1.分类只能增加方法,不能增加成员变量
2.分类方法实现中可以访问原来类中声明的成员变量
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
4.方法调用的优先级:分类(最后参与编译的分类优先) –> 原来类 –> 父类
分类命名规则:原来类名+程序员名字简写或者功能

类的本质

1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。

2.当第一次使用某个类时,就会调用当前类的+initialize方法

3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)

description方法

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

1.会调用对象p的-description方法2.拿到-description方法的返回值(NSString *)显示到屏幕上3.-description方法默认返回的是“类名+内存地址”

可以重写description

SEL

@selector(选择子)用来创建发送给对象方法的名称。

一.取得selector值.

C函数指针
int add(int val)
{
return val+1;
}

int (* c_func)(int val); //定义一个函数指针变量

c_func = add ; //把函数addr地址直接赋给c_func

object-c的选择器

@interface foo
-(int)add:int val;
@end

SEL class_func ; //定义一个类方法指针
class_func = @selector(add:int);

注意1. @selector是查找当前类的方法,而[object @selector(方法名:方法参数..) ] ;是取object对应类的相庆方法.
注意2.查找类方法时,除了方法名,方法参数也查询条件之一.
注意3. 可以用字符串来找方法 SEL 变量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);

二.执行selector值.
取得相应值后,怎么处理SEL值呢,这一点仍然与函数指针一样,就是执行它
函数指针执行,(以下有几种等效形式)
*c_func(10);
c_func(10);

SEL变量的执行.用performSelecor方法来执行.
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];

三.selector的应用场合
selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

0 0
原创粉丝点击