您的位置:首页 > 移动开发 > Objective-C

NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?

2015-05-12 17:13 453 查看
声明
NSString
*testObject
是告诉编译器请把
testObject
当做一个
NSString
来检查,如果后面调用了非
NSString
的方法,会产生警告。
(实际编译的时候

NSString *testObject 等同于 id
testObject 编译器都会在 栈空间分配一个 id 类型的数据)id 数据实际上就是一个
struct objc_object 结构体指针,(如下定义)。

///
Represents an instance of a class.
struct
objc_object {
Class
isa OBJC_ISA_AVAILABILITY;
};

///
A pointer to an instance of a class.
typedef
struct objc_object *id;

因为不管指向的是什么类型的对象,一个指针所占的内存空间都是固定的,所以这里声明成任何类型的对象,最终生成的可执行代码都是没有区别的。这里限定了
NSString
只不过是告诉编译器如何进行
代码的 错误 检查。

接着,你创建了一个
NSData
对象,然后把这个对象所在的内存地址保存在
testObject
里。那么运行时,
testObject
指向的内存空间就是一个
NSData
对象。你可以把
testObject
当做一个
NSData
对象来用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐