- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
XCode6.1-Objective-C新版特性
XCode6.1中的Objective-C新特性:
instancetype关键字:
id类型:
id类型对于Oc来讲,是一种万能类型,可以把所有的继承自NSObject的对象,转换成id类型。但id类型本身并不检查对象的真实类型,导致在编译时并不检查调用的方法是否为该类的成员方法,而在运行时可能会引起异常。
如以下实际代码:
头文件中:
@interface IdAndInstancetype : NSObject
+(id) ObjectFactoryID;//静态工厂方法,返回id类型的对象指针
@end
源文件中:
@implementation IdAndInstancetype
+(id) ObjectFactoryID
{
return [[[self class] alloc] init];
}
@end
在main函数中使用该方法:
id objID = [[IdAndInstancetype ObjectFactoryID] init];
[objID count];
缺陷:以上代码在编译时,调用count方法这一句并不会给出警告或错误,因为id类型并不检查对象的实际类型。而在运行时由于对象实际上是IdAndInstancetype类型的,但它内部并没有count方法,因此会报出异常错误中断程序的运行!
instancetype类型:
①定义:
instancetype类型是新版本Oc中增加的关键字,它的含义是实例对象的实际类型。编译器会在将某对象的类型为instancetype时,会自动转换为该实例的“真正类型”。
注意,instancetype只应该在alloc、init和工厂方法的返回值类型中使用,不要再其它的代码中用它。
比如这样使用instancetype是不正确的:
instancetype obj;//编译错误,instancetype不是真正的“类型”
id obj;//正确,id是一种类型
②instancetype的一般用法:
头文件中添加新的工厂方法:
@interface IdAndInstancetype : NSObject
+(id) ObjectFactoryID;
+(instancetype) ObjectFactoryInstancetype;
-(void) methodFather;//添加一个父类的成员方法
@end
原文件中添加方法的实体:
+(instancetype) ObjectFactoryInstancetype
{
return [[[self class] alloc] init];
}
//同时也添加父类成员方法的实体
-(void) methodFather
{
NSLog(@%@, @super class method!);
}
注意:上述代码中的[self class],据官方文档说明,class方法会返回“类对象”,代表了当前对象所属的类。
在main函数中使用时:
A、错误用法:
[[IdAndInstancetype ObjectFactoryInstancetype] count];
会提示IdAndInstancetype没有count成员的编译错误!
B、正确用法:
假设有子类名叫SubClass,它继承了IdAndInstancetype的工厂方法,并且有自己的成员方法:
头文件:
@interface SubClass : IdAndInstancetype
-(void) methodSon;
@end
源文件:
@implementation SubClass
-(void) methodSon
{
NSLog(@%@, @sub class method!);
}
@end
main函数中:
[[IdAndInstancetype ObjectFactoryInstancetype] methodFather];
//该工厂方法会返回父类型,因此不能够访问子类的成员方法methodSon
[[SubClass ObjectFactoryInstancetype] methodSon];
//该工厂方法会返回子类型,因此够访问父类和子类的成员方法methodFather 、methodSon
@property关键字
定义:
property是用来捕获对象的状态。它们反射出对象的内在属性以及和其他对象的关系。它提供了一个安全的、便捷的方法,以便我们访问对象的属性,而不需要写出各种访问方法(getter、setter)。
使用@property关键字有以下几点好处:
自动的实现getter和seeter方法:当你声明了pr
文档评论(0)