黑马程序员————第二十天
2015-07-08 11:45
330 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
点特性
左侧stu.age=10;<=>[stu setAge:10];
int a=p.age;点语法出现在等号右侧将page替换为[p.age];
验证文件是否copy进
点击项目->BuildPhases->Compile Source
OC点语法本质为方法调用必须要有set get方法
@property编译器指令
告诉编译器声明属性的访问器(getter/setter)方法
@property 类型名 方法名(为get方法名)
写在声明@interface@end内
@property声明的实例变量为私有变量只在类中使用
@synthesize
在.m文件中定义set,get方法的实现
@synthesize age;
@synthsize name;与@property连用默认生成了两个变量,age,name
必须@property先声明
@synthesize age=_age,weight=_weight //将实例变量与属性关联不再使用默认生成变量
Xcode4.4以后可只使用@property自动生成下划线实例变量(私有变量)
编译时报错 不符合语法
运行时报错 代码区不存在
如果父类没有子类相同名的方法需要强制转换
NSObject *obj=[Animals new];
[(Animal *)obj run];
ios5后推出instancetype类型 与id类型不同点:
instance可返回和方法所在类型相同类型的对象 id只能返回未知类型对象
相同点就是都能作为返回值
动态绑定
在OC中 对象能否调用指定的方法 不是由编译器决定而是由运行时决定的
被称作方法的动态绑定
在OC中对象不调用方法而是接受消息 源代码中消息也称为选择器
消息表达式为[reciver message]
首先通过第一个参数reciver找到它的_isa指针,然后在_isa指向的class对象中使用第二个参数selector查找方法
如果没有找到就用当前class对象中的新_isa指针到上一级的父类的class对象中查找
当找到方法后,再依据reciver的self指针找到当前对象调用当前对象的具体实现的方法(IMP)然后传递参数调用实现方法
若一直到NSObject的Class对象也没有,则会报错。
内省 对象在运行时获取其类型的能力
1.判断类型
-(Bool) isKindOfClass:classObj判断实例对象是否为这个类或其子类实例
Bool b= animal isKindOfClass:[Animal class];
-(Bool) isMemberOfClass:classObj 判断实例对象是否为这个类实例
-(Bool) isSubClassOfClass:classObj 判断实例对象是否为其子类实例
2.判断对象能否响应指定的方法
-(Bool)respondsToSelector:selector
SEL s1=@selector(run);
Bool b=[dog respondsToSelector:s1];
判断类有无此方法
-(Bool)instanceRespondToSelector:selector
[Dog instanceRespondToSelector:s1];
响应方法
1.通过performselector响应无参方法
SEL s1=@selector(run);
[ani performselector:s1]
2.通过performselector:withObject:响应有参方法
SEL s1=@selector(eat:);//因为有一个参数所以eat后有冒号
[ani performselector:s1withObject:@"香蕉"];
3.通过performselector:withObject:withObject:响应两个参数
[ani performselector:s1withObject:@"香蕉"withObject:@"苹果"];
构造方法
1.alloc分配空间 此时内存已经清零
2.init初始化
3.返回值为对象地址
init就是构造方法 是对象方法减号开头
@implementation Person
-(instancetype)init{
self=[super init];// 作用:防止文件类的初始化方法释放(release)掉self指向的空间并重新alloc了一块空间
[super init]可能失败表示父类初始化失败 super指代父类的对象
if(self)
{
-age=10;
}
return self;
}
自定义构造方法
1.一定为对象方法减号开头
2.返回值为instancetype类型
3.方法名为initWith开头
点特性
左侧stu.age=10;<=>[stu setAge:10];
int a=p.age;点语法出现在等号右侧将page替换为[p.age];
验证文件是否copy进
点击项目->BuildPhases->Compile Source
OC点语法本质为方法调用必须要有set get方法
@property编译器指令
告诉编译器声明属性的访问器(getter/setter)方法
@property 类型名 方法名(为get方法名)
写在声明@interface@end内
@property声明的实例变量为私有变量只在类中使用
@synthesize
在.m文件中定义set,get方法的实现
@synthesize age;
@synthsize name;与@property连用默认生成了两个变量,age,name
必须@property先声明
@synthesize age=_age,weight=_weight //将实例变量与属性关联不再使用默认生成变量
Xcode4.4以后可只使用@property自动生成下划线实例变量(私有变量)
编译时报错 不符合语法
运行时报错 代码区不存在
如果父类没有子类相同名的方法需要强制转换
NSObject *obj=[Animals new];
[(Animal *)obj run];
ios5后推出instancetype类型 与id类型不同点:
instance可返回和方法所在类型相同类型的对象 id只能返回未知类型对象
相同点就是都能作为返回值
动态绑定
在OC中 对象能否调用指定的方法 不是由编译器决定而是由运行时决定的
被称作方法的动态绑定
在OC中对象不调用方法而是接受消息 源代码中消息也称为选择器
消息表达式为[reciver message]
首先通过第一个参数reciver找到它的_isa指针,然后在_isa指向的class对象中使用第二个参数selector查找方法
如果没有找到就用当前class对象中的新_isa指针到上一级的父类的class对象中查找
当找到方法后,再依据reciver的self指针找到当前对象调用当前对象的具体实现的方法(IMP)然后传递参数调用实现方法
若一直到NSObject的Class对象也没有,则会报错。
内省 对象在运行时获取其类型的能力
1.判断类型
-(Bool) isKindOfClass:classObj判断实例对象是否为这个类或其子类实例
Bool b= animal isKindOfClass:[Animal class];
-(Bool) isMemberOfClass:classObj 判断实例对象是否为这个类实例
-(Bool) isSubClassOfClass:classObj 判断实例对象是否为其子类实例
2.判断对象能否响应指定的方法
-(Bool)respondsToSelector:selector
SEL s1=@selector(run);
Bool b=[dog respondsToSelector:s1];
判断类有无此方法
-(Bool)instanceRespondToSelector:selector
[Dog instanceRespondToSelector:s1];
响应方法
1.通过performselector响应无参方法
SEL s1=@selector(run);
[ani performselector:s1]
2.通过performselector:withObject:响应有参方法
SEL s1=@selector(eat:);//因为有一个参数所以eat后有冒号
[ani performselector:s1withObject:@"香蕉"];
3.通过performselector:withObject:withObject:响应两个参数
[ani performselector:s1withObject:@"香蕉"withObject:@"苹果"];
构造方法
1.alloc分配空间 此时内存已经清零
2.init初始化
3.返回值为对象地址
init就是构造方法 是对象方法减号开头
@implementation Person
-(instancetype)init{
self=[super init];// 作用:防止文件类的初始化方法释放(release)掉self指向的空间并重新alloc了一块空间
[super init]可能失败表示父类初始化失败 super指代父类的对象
if(self)
{
-age=10;
}
return self;
}
自定义构造方法
1.一定为对象方法减号开头
2.返回值为instancetype类型
3.方法名为initWith开头
相关文章推荐
- 黑马程序员——OC—类方法及匿名类
- 程序员必读的六本书
- 程序员必读的六本书 2015-07-08 11:26 21人阅读 评论(0) 收藏
- 黑马程序员——JAVA笔记——LOCK
- 国外程序员常去的14个顶级开发社区
- 【转载】2015Android 面试题 01
- 面试题45:圆圈中最后剩下的数字
- 大公司最喜欢问的Java集合类面试题
- 面试知识点总结01
- php相关问题学习(以备面试)
- 黑马程序员——OC—类和对象的使用
- [异能程序员]第一章 酒后事发,上头条
- 解析程序员的几个成长阶段
- 对程序员非常重要的24个软技能
- 黑马程序员——Java基础---String
- 黑马程序员---Java基本语法(二)
- 黑马程序员————第十九天
- 也谈论程序员的"尊重"问题
- 20条不得不看的职场哲理漫画
- 黑马程序员————第十八天