您的位置:首页 > 其它

OC的基础语法(五)

2015-10-19 13:41 239 查看
1.点语法

/*

点语法:

通过 实例对象名.成员变量 的方式获取或者设置成员变量值得形式,就是点语法

1)点语法获取成员变量值的格式: 点语法格式,出现在了等号的右侧

NSString *str = p.name;   //获取变量名

2)点语法设置成员变量值的格式: 点语法格式,出现在了等号的左侧

p.name = @"过儿";

3)点语法的实质:

点语法是一个编译器特性,是方法的调用

遇到这句话:p.name = @"过儿";

转换为: [p setName:@"过儿"];  //实质还是调用set方法

遇到这句话:NSString *name = p.name;
转换为: NSString *name = [p name];  //实质是调用了get方法

4)使用注意:

1)如果没有定义成员变量的get和set方法,则不能够使用点语法。
2)OC的点语法,本质是方法的调用,不是直接访问成员变量。

*/


2.@property的使用

/*

@property 编译器的指令

告诉编译器帮我们声明成员变量的getter和setter方法

@property 的使用格式:

@property 数据类型  成员变量名;

*/


@property float money;
/*
-(void)setMoney:(float)money;
-(float)money;

*/

@end


3.@synthesize

/*

@synthesize

帮我们实现 用 @property声明的属性的set和get方法

使用格式: @synthesize 成员变量名

{
int age;
}
@property int age;

@synthesize age;   //展开后操作的是 age成员变量

@synthesize使用注意:

1)@synthesize  name;  //name必须存在
2)当有多个变量需要实现它的get和set方法的时候,

@synthesize age,pid;  //age和pid必须类型一致
@property int age,pid; //age和pid必须类型一致

3)@synthesize = _age;    //表示指定get和set方法操作的变量

*/


4.结合使用

/*

@property在xcode4.4之前

@property只是用来作为 get和set方法的声明

@synthesize用来作为 get和set方法的实现

所以,在4.4之前他们是成对出现的

@property增强

我们只需要在 @interface 和 @end之间,使用一次@property int age;

编译器会自动的帮我们把age的实现也给做了。

*/


5.新手容易混肴的注意点



如图 如果先定义age 后如果再定义_age 会出现警告

这是因为@property age之后 xcode会自动实例一个变量_age ,这时如果再@property _age xcode是不会实例_age的

即不会实例__age(两个下划线)

解决问题也很简单 只需要添加

@synthesize  一一对应即可

6.id类型


/*

动态类型和静态类型

1、动态类型:程序在运行的时候,才知道对象属于哪个类类型

Animal *ani = [Dog new];

动态类型是在运行时进行检查的

2、静态类型:程序在编译的时候,就知道对象属于哪个类型

Dog *dog = [Dog new];

静态类型是在编译的时候检查的

3、NSObject 访问子类特有的方法

所有的类都是继承自NSObject

NSObject *obj = [Dog new];

obj ---> Dog  (多态)

4、id类型

id类型实际上就是NSObject

*/int main(int argc, const char * argv[]) {


@autoreleasepool {

Animal *ani = [Dog new];
//狗的方法
//[ani run];

//NSObject 是一个基类,是所有类的父类,
//NSObject 可以指向任何类
//        NSObject *obj = [Dog new];  //运行是检查
//        [(Dog*)obj run];
//
//        obj = [Cat new];    //运行是检查
//        [(Cat *)obj run];

  //以上需要强制转换类型

//定义一个id类型的指针
//id类型也称为 万能指针 类型  自动检测类型

//obj1指向了Dog的对象
id obj1 = [Dog new];
[obj1 run];

//obj1 指向了Cat对象
obj1 = [Animal new];
[obj1 run];

//        Animal *an3 = [Animal new];
//        [(Dog*)an3 bark];

//[(Dog*)obj1 bark];

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: