/*id 被称为指向任何OC对象的指针,有点类似于Java中的Object对象*/
/*声明了一个指正对象 指向了字符串 我们来看看能不能调用字符串方法*/
id obj = @"张三";
//是可以的 因为在编译期间 编译器已经确定 obj指向的是一个字符串
[obj stringByAppendingString:@"abc"];
//我创建了个类初始化对象返回是ID
NSString* isstring = [[Person alloc] initPerson];
/*
我们来看看调用方法 在编译的时候是可以调用
因为此对象返回是ID 我让字符串接受 骗过编译器以为真的是字符串 所以能调用
不过在真正的运行的时候会报错! 因为他真正指向的是Person 因为Person没有这个方法
所以挂了 OC是动态检测对象的真实类型;
*/
[isstring stringByAppendingString:@"张三"];
/*
instancetype 只能修饰方法返回值 不能修变量 他去ID区别在那里?
当其返回值为instanceType时,xcode则会报出警告.
所以,建议写类的方法时,对于返回值,如果是id类型的话,尽量使用instanceType.
看如下案例
*/
//此时已经发出警告 编译已经发现 他需要的是一个Person指针 然而你赋值给字符串 所以抛出警告 new_person 初始化对象返回Instancetype
NSString *isstrin1 = [[Person alloc] new_person];
/*纯属个人理解 有不对的地方希望大家指出! */
OC-ID类型和instanceType区别
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.