Objective-C编程 - 1. 浅谈内存分配

Objective-C语言的对象类型都必须用指针,对象所占的内存是在堆(heap)上分配的。

NSString也必须在堆上分配,因此必须用指针。

NSString *someString = @"here is the string";
NSString *anotherString = someString;

上面例子的内存分布图如下:

 

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

Objective-C中内存管理的机制叫自动引用计数(ARC)。

CGRect是结构体,是栈对象,因此不需要使用指针。

CGRect frame;
frame.origin.x = 0.0f;
frame.size.width = 100.0f;

时间: 2024-09-29 11:54:21

Objective-C编程 - 1. 浅谈内存分配的相关文章

Linux下C编程:浅谈动态内存

使用动态内存时需要用户自己去申请资源和释放资源.用户可以随时的分配所需空间,根据需要分配空间大小,并在最后释放申请内存. 动态内存也存在隐患:在大型的项目当中管理申请的动态内存是很复杂的,以及释放申请的内存有难想起的.在释放动态内存时可能不止一个指针指向了该内存,所以释放的时候是很容易出错的.内存无法释放就会造成内存泄露,这也就是为什么服务器要经常的每个一段时间重启的原因. 内存管理操作: 分配内存函数: #include <stdlib.h> void *malloc(size_t size

【Linux网络编程】浅谈 C/S 和 B/S 架构

概述 在这个信息急剧膨胀的社会,我们不得不说人类正进入一个崭新的时代,那就是信息时代.信息时代的一个主要而显著的特征就是计算机网络的应用.计算机网络从最初的集中式计算,经过了Client/Server阶段(有两层C/S和三层C/S),已发展到目前最流行的 Browser/Server计算模式.其中颇具争论和影响力的是C/S以及B/S架构,C/S是一种历史悠久且技术非常成熟的架构,B/S是新生代架构,从C/S派生出来,有很多创新,在web信息时代虎虎生威. C/S架构 一.C/S架构及其背景 C/

浅谈内存、32位与64位系统的羁绊

今天,Dwight Silverman将给大家普及一下小知识.当我们买电脑时,是选择32位Vista还是尝试一下64位Vista呢?在回答这个问题前,先来了解一下这方面的知识. 比起4G限制的32位Vista来,64位版的可以有效利用更多内存.从这句话可以看出,4G是个分水岭.低于4G内存,32位Vista照跑不误,但是高于4G后,就需要64位Vista才能充分利用这么大的内存了.人们往往会将"内存"和"RAM"搞混淆,会把内存误认为就是RAM,这个错误的概念让不少

【Linux系统编程】 浅谈标准I/O缓冲区

标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数.它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦.不幸的是,标准I/O库最令人迷惑的也是它的缓冲. 标准I/O提供了三种类型的缓冲: 1.全缓冲: 在填满标准I/O缓冲区后才进行实际I/O操作.常规文件(如普通文本文件)通常是全缓冲的. 2.行缓冲: 当在输入和输出中遇到换行符时,标准I/O库执行I/O操作.这允许我们一次输出一个字符,但只有在写了一行之后才进行实际I/O操作.标准输入和

浅谈C语言编程中程序的一些基本的编写优化技巧_C 语言

大概所有学习C语言的初学者,都被前辈说过,C语言是世界上接近最速的编程语言,当然这并不是吹牛,也并不是贬低其他语言,诚然非C语言能写出高速度的代码,但是C语言更容易写出高速的程序(高速不代表高效),然而再好的工具,在外行人手中也只能是黯淡没落. 对于现代编译器,现代CPU而言,我们要尽量迎合CPU的设计(比如架构和处理指令的方式等),虽然编译器是为程序员服务,并且在尽它最大的能力来优化程序员写出的代码,但是毕竟它还没有脱离电子的范畴,如果我们的代码不能让编译器理解,编译器无法帮我们优化代码,那么

浅谈C++内存分配及变长数组的动态分配_C 语言

第一部分 C++内存分配 一.关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在 例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存 储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员

浅谈java+内存分配及变量存储位置的区别_java

Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象) ◆堆:存放用new产生的数据 ◆静态域:存放在对象中用static定义的静态成员 ◆常量池:存放常量 ◆非RAM存储:硬盘等永久

浅谈CLR的内存分配和回收机制

相对于C++程序员来说,C#程序员是非常幸运的,至少我们不需要为内存泄漏(Memory Leak)而头疼,不需要负责内存的分配和回收.但这不意味着我们只需要知道new的语法 就可以了,作为一个严肃的C#程序员,我们应该对此有所了解,有助于我们编写性能更好 的代码. 主要内容: CLR的内存分配机制 CLR的回收机制 一.CLR的内存分配机制 .NET Framework 的垃圾回收器管理应用程序的内存分配和释放.每次使用 new 运算 符创建对象时,运行库都从托管堆为该对象分配内存.只要托管堆中

浅谈Python 对象内存占用_python

一切皆是对象 在 Python 一切皆是对象,包括所有类型的常量与变量,整型,布尔型,甚至函数. 参见stackoverflow上的一个问题 Is everything an object in python like ruby 代码中即可以验证: # everythin in python is object def fuction(): return print isinstance(True, object) print isinstance(0, object) print isinst