黑马程序员--IOS基础第二十天(OC)



1 OC中的点语法
点语法: 对象名.成员变量名 (点语法不是访问成员变量,而是方法的调用)
它是一个编译器特性
点语法作用:可以替换传统的getset方法的调用
点语法的前提:
首先得先有getset方法
点语法实质:
调用getset方法
如果点语法出现在= 的左边,表示设置值,相当于调用了set方法
p.age = 10;
替换为:[p setAge:10];
如果点语法出现在= 的右边,表示获取值,相当于调用了get方法
int age = p.age;
替换为:int age = [p age];
替换为:[p dispAge:p.age];
[p dispAge:[p age]];
注意:
点语法实质是调用getset方法,所以,如果没有定义成员变量的getset方法,这个时候,
是不能使用点语法的。
2
@property使用、增强
1
@property Xcode4.4之前的使用方法
(1)
只是用@property作为方法的声明
格式: @property intage; 表示帮我们生成一个getset age的方法
{
int age;
int _age;
NSString *_name;
}
@property int age;
-(void)setAge:(int) age;
-(int)age;
//
手工实现 getset方法
-(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
变量名;
自动帮我们实现对应的getset方法
@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 中帮我们实现 getset方法
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:
类是否能够响应方法
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开头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值