第1条:了解Objective-C语言的起源

  1. something变量指向分配在堆里的某块内存,其中含有一个NSString对象。后面创建的anotherthing指向同一块内存地址,并不拷贝对象本身,只是两个变量同时指向此对象。
    当前“栈帧”里分配了两块内存,每块内存的大小都能容下一枚指针(32位架构计算机是4字节,64位计算机是8字节),每块内存的值都是一样,就是NSString实例的内存地址。
NSString *someString = @"The Thing";
NSString *anotherString = something;
  1. 分配在堆中的内存必须直接管理(MRC下手动管理,ARC下编译器自动生成管理内存的代码),而分配到栈上用于保存变量的内存则会在其栈帧弹出时自动清理。
1.png
  1. 在Objective-C中,有时会有不含*的变量:
CGRect frame = CGRectMake(0, 0, 100, 100);

CGRect本质上是C结构体:

struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CGRect CGRect;

整套Foundation框架大量使用了这类结构体,主要是为了节约开销(分配以及释放堆内存堆开销)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容