黑马程序员技术交流社区
标题: OC笔记分享 [打印本页]
作者: z276698840 时间: 2016-3-29 08:22
标题: OC笔记分享
//---------------------------类对象
应该如何理解类:
类 ----> 通俗理解就是一个"类型",可以创建对象(实例对象)
比如 Persson *p = [Person new];
-(Person *)run:(Person *)p;
类 ----> 类是一个"类类型的对象" (Class类型的对象)
1,类的本质其实也是一个对象(Class类型的对象);
/*
类对象
类对象在程序运行时一直存在。
类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等
每一个对象都包含一个指向其类对象的isa指针。
*/
2、类对象如何获取
# 通过实例对象获取 ------> [实例对象 class];
Dog *d1 = [Dog new];
Dog *d2 = [Dog new];
Class c = [d1 class];
Class c2 = [d2 class];
# 通过类名获取(类名其实就是类对象) -----> [类名 class];
Class c3 = [ Dog class ];
//因为类对象在整个程序中只存在一份,所以 c = c2 = c3
3.类对象的使用
# 1)可以用来调用类方法:
//获取类对象
Class c1 = [Person class];
//使用类对象调用类方法
[c1 test]; // test是一个+号方法
# 2)可以用来实例化实例对象
//获取类对象
Class c1 = [Person class];
//使用类对象创建实例对象
Person *p = [c1 new];
[p test]; // -test 调用对象方法
Person *p = [Person new];
# 类对象只能使用在等号右边
# 类对象可以作为方法的参数传递
---------------------------------------
回顾: setter / get方法
@interface Person : NSObject
{
//实例变量
NSString *_name;
int _age;
float _height;
float _weight;
int _sex;
}
对象 -> _实例变量
---> setter/get方法
-(void)setName:(NSString *)name{
_name = name;
}
[对象 setName:@"xxx" ];
-(NSString *)name{
return _name;
}
//调用
NSString *names = [对象 name];
//----------------------点语法
1. 传统setter, getter方法
-(void)setAge:(int)age{
_age = age;
}
-(int)age{
return _age;
}
person.age -- "本质" --> 调用set/get方法
2. 点语法
本质上展开之后相当于调用setter, getter方法
"setter方法"
p.age = 10; 展开之后等价于 [p setAge:10]; // setter方法
"get方法"
NSString *name = p.age; 等价于NSString *name = [p name]; // getter方法
对象. 成员变量 展开之后到底是setter方法, 还是getter方法, 看在等号的左边还是右边,
如果是等号左边就是setter方法, 在等号右边是getter方法
"关键:"
p.name = p.name;
等号左边 是 setter方法
等号右边 是 get方法
3. 点语法陷阱 :
在set方法使用self.
- (void)setAge:(int)newAge {
总结:
在set/get方法中不要用self使用点语法
"点语法的陷阱 仅仅只是告诉大家点语法的本质是set/get方法的调用,开发中按照正确的方向写,不会写陷阱的样式"
}
2、点语法注意
1)点语法的本质是"set/get方法的调用,而不是访问成员变量",当使用点语法时,编译器会自动展开成相应的方法。
2)切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。
3)不是所有的方法都可以通过点语法调用,set/get一定可以用点语法,"OC中方法的调用是中括号 [ ]"
4) p.name 跟 p->_name 有本质的区别 p->_name 是 对象直接访问实例变量
作者: 杨冬武 时间: 2016-3-29 22:23
好
作者: A吃素的鲨鱼 时间: 2016-3-30 13:44
赞一个
作者: Sniper-L 时间: 2016-3-31 00:47
赞
作者: ySssssssss 时间: 2016-3-31 21:49
感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |