第一章 熟悉OC

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30932479/article/details/79927192

OC语言使用“消息结构”(messageing structure)而非“函数调用”(function calling),OC语言由Smalltalk演化而来,后者是消息型语言的鼻祖。

消息结构与函数调用的关键区别在于:使用消息结构的语言,其运行时所执行的代码由运行环境决定;而使用函数调用的语言,则由编译器决定;(表示不是很懂)消息结构语言总是在运行时才会去查找索要执行的方法,编译器甚至不关心接收消息的对象时何种类型,接收消息的对象问题也要在运行时处理,其过程叫做动态绑定。

NSString *someString = @"The string";

声明一个someString的变量,其类型是NSString *, 也就是说此变量是指向NSString的指针。

对象所占内存总是分配在“堆空间”(heap space)中,绝不会分配在“栈”(stack)上,不能在栈中分配OC对象。


someString变量指向分配在堆里的某块内存,其中含有一个NSString对象。也就是说,如果再创建一个变量,令其指向同一个地址,那么并不拷贝对象,只是这两个变量会同事指向此对象:

NSString *someString = @"The string";
NSString *anotherString = someString;

只有一个NSString实例,然而有两个变量指向此实例。两个变量都是NSString*类型,说明当前“栈帧(stack frame)”里分配了两块内存,每块内存的大小都能容下一枚指针(在32位架构的计算机上市4字节,在64位计算机上市8字节)。这两块内存里的值都是一样,就是NSString实例的内存地址.

分配在堆中的内存必须直接管理,分配在栈上用于保存变量的内存则会在其栈帧弹出时自定清理。

与创建结构体相比,创建对象还需要额外的开销,例如分配及释放堆内存等。


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页