内存管理算是学习一门语言时,比较难但是最重要的一部分。 object-c 中的Foundation框架带入了引用计数这一概念和思想来管理内存。极大的减轻了程序员内存管理的负担,你不必再那么小心翼翼。
引用计数的概念如下,创建对象时,将它的引用计数设置为1,每次必须保持该对象时,就发送一条retain消息,使其引用计数加1。Foundation框架提供的其他一些方法也可以增加对象的引用计数,例如,把对象添加到数组中。
不需要对象时,可以通过发送一条release消息,使对象的引用计数减1。
当对象的引用计数到0时,系统就知道不再需要这个对象了,因此系统会释放(deallocates)它的内存。这是通过一条dealloc 消息而实现的。
首先,我们看下面的代码示例:
运行结果如下:
2011-03-22 01:20:25.806 MemoryTest[486:a0f] ffffffff, ffffffff, 1
2011-03-22 01:20:25.808 MemoryTest[486:a0f] ffffffff, ffffffff, 2
2011-03-22 01:20:25.809 MemoryTest[486:a0f] ffffffff, ffffffff, 3
内存中常量字符串的空间分配与其他对象不同。他们没有引用计数机制,因为不会去释放这些对象。这也解释了为啥retaincount为ffffffff,最大的无符号整数。或者UINT_MAX.
可变字符串对象str2被设置为常量字符串@"str2"的副本。通过发送stringWithstring消息来实现。