A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蜗牛快跑 中级黑马   /  2014-10-16 20:38  /  1024 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

id d;   //万能指针,指向\操作任何OC对象。
id d = [Person new];
// id 相当于NSObject *;

构造方法:
Person *p = [Person new];
完整的创建一个可用的对象
1.分配存储空间   +alloc
2.初始化         -init

1.调用+alloc分配存储空间
Person *p1 = [Person alloc];
2.调用-init进行初始化
Person *p2 = [Person init];

整合成一句以后为:
Person *p3 = [ [Person alloc] init ];

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

重写构造方法的注意点
1.先调用父类的构造方法([super init])
2.再进行子类内部成员变量的初始化。

去.h文件中 重写 -init方法
- (id) init
{
//一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性。
self = [super init];  //当前对象   self(以后讲,不要纠结)

if (self != nil)   //nil等于空的意思             //也可写成(self = [super init])
{                                      
//初始化成功
_age = 10;
}
//3.返回一个已经初始化完毕的对象。
return self;
}

自定义构造方法的规范
1.一定的hi对象方法,一定以 - 开头
2.返回值一般是id类型

3.方法名一般以initWith开头。

(Categeory)分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法
例如:
@interface Person (MJ)
方法
@end
可以为Person添加方法,但不能增加成员变量。
使用注意:
1.分类只能增加方法,不能增加成员变量。如果想添加变量,可以考虑通过继承创建子类。
2.分类方法实现中可以访问原来类中声明的成员变量。
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用。
4.多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效。
5.方法调用优先级:分类(最后参与编译的分类优先) --> 原来类--> 父类
6.查找方法时,优先去分类方法中查找,然后再去原来类中找,最后再去父类中找


给系统自带的类添加方法

NSString 方法:
NSString *str = @”aa2s22dd1d2d2d2d”;
查看字符串的每一个字符
unichar c = [ str characterAtIndex:0];
查看这个字符串第一个字符是什么

获取内存中的类对象有两种方法
1.Class c = [ p class];
2.Class c2 = [Person class];
类对象指的就是Person类。
内存中的类对象
类对象 = = 类

load
1.当程序启动的时候,就会加载一次项目中所有的类。在类被加载的时候调用+load方法。
2.先加载父类,再加载子类:也就是先调用父类的+load,再调用子类的+load
3.先加载原始类,再加载分类
4.不管程序运行有没有用到这个类,都会调用+load加载

+(void)load
{
NSLog(@”aaa”);
}

+initialize
1.当类第一次使用init这个类的时候,就会调用一次+initialize方法
2.一个类只会调用一次+initialize方法,先调用父类的,再调用子类的。
+(void)initialize
{
}

获取类对象的2种方式
Class c = [Person new ];      // 类方法
或者
Person *p = [Person new ];
Class c2 = [p class];         // 类对象

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

1.会调用对象p的-description方法
2.拿到-description方法的返回值(NSString *)显示到屏幕上
3.-description方法默认返回的是“类名+内存地址”
4.所以,想要改变就要重写-description方法。
5.在Person的实现类里重写-description方法
6.在-description方法中使用NSLog打印self会进入死循环。
例如:
- (NSString *)description
{
Return [NSString stringWithFormat:@”age=%d,name=%@”,_age,_name];
}

_LINE_  行号(那一行的行数)NSLog(“%d”,_LINE_);
_FILE_  输出当前路径      用%s 不能有中文 所以只能用printf()
_func_   输出当前函数名    用%s

SEL
1.每个类的方法列表都存储在类对象中
2.每个方法都有一个与之对应的SEL类型的对象
3.根据一个SEL对象就可以找到方法的地址,近而调用方法
[p test2];
1.把test2包装成SET类型的数据
2.根据SEL数据找到对应的方法地址
3.根据方法地址调用对应的方法

最简方法
[p performSelector:@selector(test3:) withObject:@”456”];

等于
SEL s = @selector(test3);

_cmd代表当前方法。

1 个回复

倒序浏览
表情都换成  :    不知道怎么回事  老是这样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马