A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我的呸 中级黑马   /  2015-8-2 22:36  /  475 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1.点语法的介绍
1、使用“点语法”
Student*stu = [[Studentalloc] init];
// 设置age的值
stu.age= 10; // 等价于[stu setAge:10];
// 取出age的值
int  age = stu.age; // 等价于int age = [stu age];
NSLog(@"age is %i", age);
这里的stu.age并不是代表直接访问stu对象的成员变量age,而是编译器遇到stu.age = 10的时候会自动将代码展开成[stu setAge:10]
把原来的int age = [stu age]替换成了int age = stu.age。这两种写法又是完全等价的,
stu.age并不是直接访问stu对象的成员变量age,而是编译器遇到int age = stu.age的时候会自动将代码展开成int age = [stu age]
OC点语法的本质是方法调用,不是直接访问成员变量。至于这个点语法代表的是get方法还是set方法,
那就取决于你是取值还是设值(也可以理解为点语法是在“=”的左侧还是右侧,左侧:如 stu.age=…. 这就是调用set方法,右侧 … = stu.age 这就是调用get方法),
取值就是get方法,设值就是set方法
点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。
切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。

2.@property和 @synthesize

@property是编译器的指令
什么是编译器的指令,编译器指令就是用来告诉编译器要做什么
@property 告诉编译器声明属性的访问器(getter/setter)方法
@property 类型 方法名
在老式的代码中:
@property只能写在@interface @end中
@property 用来自动生成成员变量的get/set方法声明(xcode4.4以前)
告诉property要生成的get/set方法声明的成员变量类型是什么
告诉property要生成的get/set方法是哪个属性的,属性名称去掉下划线
@synthesize是在m文件中定义set和get方法的实现。和@property配合使用..........但是,现在时代不同啦

@property的增强使用:
只使用@property 进行声明,类自动帮你实现。
xcode4.4以后property做了增强
帮助我们自动生成get/set方法的声明
帮助我们自动生成get/set方法的实现
如果没有手动声明成员变量,perperty会在.m文件中自动帮我们生成一个_开头的成员变量。但是如果想让子类继承父类的成员变量,还是必须在.h中手动写成员变量。
1)如果手动实现了set方法,那么编译器就只生成get方法和成员变量;
2)如果手动实现了get方法,那么编译器就只生成set方法和成员变量;
3)如果set和get方法都是手动实现的,那么编译器将不会生成成员变量,并且报错。因为编译器觉得你在玩弄它,呵呵。

3.动态类型和静态类型

多态:允许不同的类定义相同的方法。
动态类型:程序直到执行时才能确定所属的类。 Animal *ani = [Dog new];
静态类型:将一个变量定义为特定类的对象时,使用的是静态形态。Animal *ani = [Animal new];

4.id类型以及应用

id类型是一种通用的对象类型,它可以用来存储属于任何类的对象。也可以理解为万能指针。
在id的定义中,已经包好了*号。id指针只能指向oc的对象。
id类型的定义
Classisa;
Typedefstructobjcobject{
}*id;
局限性:调用一个不存在的方法,编译器会马上报错。
iOS5之后推出了instancetype类型
相同点
1)instancetype和id的异同
不同点
2)都可以作为方法的返回类型
①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
②instancetype只能作为返回值,不能像id那样作为参数。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马