OC的基础语法(五)
2015-10-19 13:41
239 查看
1.点语法
2.@property的使用
3.@synthesize
4.结合使用
5.新手容易混肴的注意点
如图 如果先定义age 后如果再定义_age 会出现警告
这是因为@property age之后 xcode会自动实例一个变量_age ,这时如果再@property _age xcode是不会实例_age的
即不会实例__age(两个下划线)
解决问题也很简单 只需要添加
/* 点语法: 通过 实例对象名.成员变量 的方式获取或者设置成员变量值得形式,就是点语法 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; }
相关文章推荐
- nyoj 2 括号配对(一)
- 循环单链表实现约瑟夫环问题
- C#文件写入
- JAVA Hibernate工作原理及为什么要用
- NSDateComponents Class Reference
- encodeURI为什么要用两次
- 减少java垃圾回收的开销方法
- eclipse运行WordCount
- NSZone
- iOS APP 浅谈架构
- C++primer学习:拷贝控制(3)
- java集合map的遍历
- 【bzoj4260】 Codechef REBXOR trie树
- zookeeper 安装 windows环境
- YCbCr;YUV;RGB
- js练习题之查找数组中的位子
- HDU 5072 Coprime
- JS转义 escape()、encodeURI()、encodeURIComponent()区别详解
- [Leetcode] [Database] Duplicate Emails解题思路
- php curl post