IOS OC基础 id是什么?

来源:互联网 发布:mac网游下载 编辑:程序博客网 时间:2024/05/16 09:19

官方文档中称oc是一门动态的语言

id类型定义了一个指向通用类型对象的指针。完全可以在声明一个指针变量时使用id作为其类型定义,但这样的话编译器就不能根据指针类型提供相应的信息。

这句话是什么意思呢?

id string = @"Hello,World";

    NSString *string2 = @"Hello";

    NSLog(@"长度:%lu",string2.length);

    NSLog(@"id长度:%lu",[string length]);

当我们定义一个NSString类型时,我们输入string2.时候会提示很多种方法。

而我们定义id类型时,系统会自动调用一个正确的类型给string. 此句代码中,系统会自动给string定为NSString类型。而我们string.的时候不会提示方法。

而我们可以自己输入调用NSString length的方法。 

那么是否会正确调用呢。我们运行后看见答案是

2017-12-12 15:59:27.430766+0800 Class[407:65927]长度:5

2017-12-12 15:59:27.430811+0800 Class[407:65927] id长度:11


那么说明string是正确实现了NSString类型的方法的。

当我们输入

[someObject removeAllObjects];
不会提示错误!!! 但是由于NSString 无法响应removeAllObjects方法而产生异常错误


我们常用的 alloc init, 实际为  (id)alloc  (id)init;所以会正确返回你定义的类的实例