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

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

//  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;}

 

转载于:https://www.cnblogs.com/yaowen/p/7417199.html

你可能感兴趣的文章
Git之初体验 持续更新
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Maven之setting.xml配置文件详解
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>
HDU 2063 过山车
查看>>
高精度1--加法
查看>>
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>