博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc34--instancetype和id的区别
阅读量:7097 次
发布时间:2019-06-28

本文共 1156 字,大约阅读时间需要 3 分钟。

//  Person.h#import 
@interface Person : NSObject@property int age;- (void)test:(id)obj1; //编译不报错- (void)demo:(instancetype)obj2; //不能定义变量,不能定义形参数@end
////  Person.m#import "Person.h"@implementation Person// instancetype == id == 万能指针 == 指向一个对象// id在编译的时候不能判断对象的真实类型// instancetype在编译的时候可以判断对象的真实类型// id和instancetype除了一个在编译时不知道真实类型, 一个在编译时知道真实类型以外, 还有一个区别// id可以用来定义变量, 可以作为返回值, 可以作为形参// instancetype只能用于作为返回值// 注意: 以后但凡自定义构造方法, 返回值尽量使用instancetype, 不要使用id- (instancetype)init//- (id)init{    if (self = [super init]) {        _age = 5;    }    return self;}@end
////  main.m//  instancetype和id的区别#import 
#import "Person.h"int main(int argc, const char * argv[]) { Person *p11 =[[Person alloc] init]; [p11 setAge:99]; // 如果init方法的返回值是instancetype, 那么将返回值赋值给一个其它的对象会报一个警告,赋值给NSString不会报错 // 如果是在以前, init的返回值是id, 那么将init返回的对象地址赋值给其它对象是不会报错的 NSString *str = [[Person alloc] init];//运行时报错,不能是NSString类型 id p = [[Person alloc] init]; instancetype p1 = [[Person alloc] init];//编译时检查数据类型,instancetype不能定义变量和定义形参, NSUInteger length = [str length]; NSLog(@"length = %lu", length); return 0;}

 

转载地址:http://mphql.baihongyu.com/

你可能感兴趣的文章
Freemarker常用技巧(三)
查看>>
Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突) (转)
查看>>
关闭注册表编辑器,重新启动计算机后生效。这样资源管理器重启后就不会自动重启了。...
查看>>
Knockout应用开发指南(完整版) 目录索引
查看>>
A example that using JQuery clone
查看>>
随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比...
查看>>
Android 使用JSON格式与服务器交互 中文乱码问题解决
查看>>
_DataStructure_C_Impl:链串
查看>>
openvas
查看>>
SecureCRT同时向多个终端发送命令
查看>>
【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates
查看>>
indexOf 和 lastIndexOf 的区别
查看>>
spring boot整合activemq消息中间件
查看>>
Spark:java api实现word count统计
查看>>
mqtt-jmeter
查看>>
Android上的蓝牙通信功能的开发:BluetoothChat例程分析
查看>>
Eclipse快捷键大全(转载)
查看>>
Yahoo!网站性能最佳体验的34条黄金守则——图片、Coockie与移动应用
查看>>
微博采撷(一)
查看>>
【CLR的执行模型:加载公共语言运行库(3)】
查看>>