zoukankan      html  css  js  c++  java
  • id和NSObject *和instanceType的区别与联系 撩课

    id 被成为万能指针,也就是可以指向任何对象.

    NSObject * 本身就是定义指向NSObject类型的指针.

    那么这两者有什么区别吗?

    这两者都是既可以作为返回值,又可以作为变量修饰.而其主要区别则在于id修饰的变量不遵循<NSObject>协议.这在实现代理模式中会体现出其区别,例如在调用代理方法时会先判断该代理是否能够响应某个方法  [obj respondsToSelector:]就定义在NSObject协议中. 

    那么,苹果后来为什么有使用instancType呢?

    我觉得主要原因有两个,

    第一,是命名问题:很多数据库的设计,均有id字段.(当然,现在依然不能使用);

    第二,instancType只能作为方法返回值,不能修饰变量.而当作为方法返回值时,它与id的主要区别是什么呢?

    举个简单例子:

    NSString *str = [Person person];
    NSLog(@"%lu", str.length);

    对于以上代码,如果

    [Person person]返回值为id类型,则在编辑代码时xcode不会报错或者警告,运行时则会崩溃(因为OC是动态检测对象的真实类型);
    反之,当其返回值为instanceType时,xcode则会报出警告.
    所以,建议写类的方法时,对于返回值,如果是id类型的话,尽量使用instanceType.
  • 相关阅读:
    [USACO08MAR]土地征用Land Acquisition
    树链剖分
    [AHOI2008]紧急集合 / 聚会
    P1852 [国家集训队]跳跳棋
    Ant Trip(欧拉回路+并查集)
    单词游戏
    POJ3694 Network
    C++ STL小总结
    2-Sat专题
    6大名家带你穿越大半个中国去深思
  • 原文地址:https://www.cnblogs.com/dashunzi/p/3733139.html
Copyright © 2011-2022 走看看