黑马程序员--IOS基础第二十天(OC)
2015-07-15 11:07
302 查看
1、
OC中的点语法
点语法:
对象名.成员变量名
(点语法不是访问成员变量,而是方法的调用)
它是一个编译器特性
点语法作用:可以替换传统的get和set方法的调用
点语法的前提:
首先得先有get和set方法
点语法实质:
调用get和set方法
如果点语法出现在=
的左边,表示设置值,相当于调用了set方法
p.age = 10;
替换为:[p setAge:10];
如果点语法出现在=
的右边,表示获取值,相当于调用了get方法
int age = p.age;
替换为:int age = [p age];
替换为:[p dispAge:p.age];
[p dispAge:[p age]];
注意:
点语法实质是调用get和set方法,所以,如果没有定义成员变量的get和set方法,这个时候,
是不能使用点语法的。
2、@property使用、增强
1)@property
在Xcode4.4之前的使用方法
(1)只是用@property作为方法的声明
格式: @property intage;
表示帮我们生成一个get和set
age的方法
{
int age;
int _age;
NSString *_name;
}
@property int age;
-(void)setAge:(int) age;
-(int)age;
//手工实现 get和set方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@property int _age;
-(void)set_age:(int) _age;
-(int)_age;
@property NSString *name;
-(void)setName:(NSString*) name;
-(NSString*)name;
( 2)
@synthesize 关键字
@synthesize 变量名;
自动帮我们实现对应的get和set方法
@synthesize age,_age;
@synthesize 相当于帮我们实现了下面的方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@synthesize name;
( 3)
@synthesize name = _b;
{
NSString *name;
NSString *_b;
}
@property NSString *name;
@synthesize name; // get和set方法设定的是
name的值
@synthesize name = _b; //相当于操作_b的值
-(void)setName:(NSString *) name{
_b = name;
}
-(NSString *)name{
return _b;
}
注意:在4.4之前,
@property和@synthesize成对出现
2) @property
在Xcode4.4之后(
@property增强)
增强使用:
@property int score;
1) .h文件中
帮我们声明setScore(
setter)
和score(
getter)方法
2) .m
中帮我们生成 _score的私有变量(在外部不能访问,不能被子类继承)
3) .m
中帮我们实现 get和set方法
3、 @synthesize的使用
4、动态类型&id类型
动态类型:程序在运行的时候,才能确定对象属于什么类型
静态类型:程序编译的时候,就确定了对象的类型
动态类型的体现:
多态,父类指针可以指向子类对象
NSObject 是所有类的基类
NSObject *obj = [Dog new];
obj = [Person new];
父类调用子类特有的方法
[(Person *)obj eat];
//id类型, id类型又被称为
万能指针。
id obj; //运行时检查
obj = [Car new]; //实例变量_speed
[obj stop];
[obj stop];
5、动态类型检测的方法
7个方法
1)对象所属关系判断
对象是否是指定类或者子类的实例对象
isKindofClass
对象是否是指定类的实例对象
isMemberOfClass
类是否是另外一个类的子类
isSubclassOfClass
[Dog class]; Dog;
[d class];
2)判断能否响应方法
对象是否能够响应方法
respondsToSelector:
<
af93
span style="color:#000000;font-family:'宋体';font-size:9pt;">类是否能够响应方法
instranceRespondsToSelector:
类去响应方法
3)响应方法
传参数
6、构造方法的使用
[Person new];
-> [Person alloc]; //空间申请完后,不能立即使用,有可能会导致意想不到的错误
-> [[Person alloc] init];
[Person new]; 会把我们的成员变量的值,默认的设置为0
init 是我们OC类的一个构造方法
构造方法是类创建的时候,默认调用的
init 是继承自 NSObject
的
在子类中通过重写父类的init方法,指定成员变量初始化值
init方法的固定格式:
-(id)init{
//初始化父类的
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_age = 10;
}
//返回
return self;
}
7、自定义构造方法
如果要指定成员变量值的初始化,需要自定义构造方法
1)一定是对象方法
2)返回值
一般是 id类型
3)一定是以initWith开头
1、
OC中的点语法
点语法:
对象名.成员变量名
(点语法不是访问成员变量,而是方法的调用)
它是一个编译器特性
点语法作用:可以替换传统的get和set方法的调用
点语法的前提:
首先得先有get和set方法
点语法实质:
调用get和set方法
如果点语法出现在=
的左边,表示设置值,相当于调用了set方法
p.age = 10;
替换为:[p setAge:10];
如果点语法出现在=
的右边,表示获取值,相当于调用了get方法
int age = p.age;
替换为:int age = [p age];
替换为:[p dispAge:p.age];
[p dispAge:[p age]];
注意:
点语法实质是调用get和set方法,所以,如果没有定义成员变量的get和set方法,这个时候,
是不能使用点语法的。
2、@property使用、增强
1)@property
在Xcode4.4之前的使用方法
(1)只是用@property作为方法的声明
格式: @property intage;
表示帮我们生成一个get和set
age的方法
{
int age;
int _age;
NSString *_name;
}
@property int age;
-(void)setAge:(int) age;
-(int)age;
//手工实现 get和set方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@property int _age;
-(void)set_age:(int) _age;
-(int)_age;
@property NSString *name;
-(void)setName:(NSString*) name;
-(NSString*)name;
( 2)
@synthesize 关键字
@synthesize 变量名;
自动帮我们实现对应的get和set方法
@synthesize age,_age;
@synthesize 相当于帮我们实现了下面的方法
-(void)setAge:(int) age{
self->age = age;
}
-(int)age{
return age;
}
@synthesize name;
( 3)
@synthesize name = _b;
{
NSString *name;
NSString *_b;
}
@property NSString *name;
@synthesize name; // get和set方法设定的是
name的值
@synthesize name = _b; //相当于操作_b的值
-(void)setName:(NSString *) name{
_b = name;
}
-(NSString *)name{
return _b;
}
注意:在4.4之前,
@property和@synthesize成对出现
2) @property
在Xcode4.4之后(
@property增强)
增强使用:
@property int score;
1) .h文件中
帮我们声明setScore(
setter)
和score(
getter)方法
2) .m
中帮我们生成 _score的私有变量(在外部不能访问,不能被子类继承)
3) .m
中帮我们实现 get和set方法
3、 @synthesize的使用
4、动态类型&id类型
动态类型:程序在运行的时候,才能确定对象属于什么类型
静态类型:程序编译的时候,就确定了对象的类型
动态类型的体现:
多态,父类指针可以指向子类对象
NSObject 是所有类的基类
NSObject *obj = [Dog new];
obj = [Person new];
父类调用子类特有的方法
[(Person *)obj eat];
//id类型, id类型又被称为
万能指针。
id obj; //运行时检查
obj = [Car new]; //实例变量_speed
[obj stop];
[obj stop];
5、动态类型检测的方法
7个方法
1)对象所属关系判断
对象是否是指定类或者子类的实例对象
isKindofClass
对象是否是指定类的实例对象
isMemberOfClass
类是否是另外一个类的子类
isSubclassOfClass
[Dog class]; Dog;
[d class];
2)判断能否响应方法
对象是否能够响应方法
respondsToSelector:
<
af93
span style="color:#000000;font-family:'宋体';font-size:9pt;">类是否能够响应方法
instranceRespondsToSelector:
类去响应方法
3)响应方法
传参数
6、构造方法的使用
[Person new];
-> [Person alloc]; //空间申请完后,不能立即使用,有可能会导致意想不到的错误
-> [[Person alloc] init];
[Person new]; 会把我们的成员变量的值,默认的设置为0
init 是我们OC类的一个构造方法
构造方法是类创建的时候,默认调用的
init 是继承自 NSObject
的
在子类中通过重写父类的init方法,指定成员变量初始化值
init方法的固定格式:
-(id)init{
//初始化父类的
//判断是否初始化成功
if(self = [super init]){
//初始化自己的信息
_age = 10;
}
//返回
return self;
}
7、自定义构造方法
如果要指定成员变量值的初始化,需要自定义构造方法
1)一定是对象方法
2)返回值
一般是 id类型
3)一定是以initWith开头
相关文章推荐
- 给Android程序员的六个建议
- 黑马程序员--IOS基础第十九天(OC)
- 黑马程序员--IOS基础第十七天(OC)
- 黑马程序员--IOS基础第十六天(OC)
- 如何摧毁一个程序员的效率?
- Dash---程序员的好帮手
- 黑马程序员——JAVA基础------IO流(三)----字符流
- 程序员编程生涯中经常会犯的7个错误
- 如何摧毁一个程序员的效率?
- JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结
- Java线程面试题Top50
- 阿里前端电话面试
- 年轻程序员需要学习的5大经验
- 黑马程序员——Java IO (第十篇)
- 《高效程序员的45个习惯》notes
- 程序员眼中的编程语言
- 10年工作经验老程序员推荐的7个开发类工具
- 一次面试引发的思考(中小型网站优化思考)
- 程序员技术练级攻略
- 黑马程序员--第四天(面向对象)