IOS开发笔记12-Object-C中的对象与内存
2016-12-10 09:30
267 查看
转载请标明出处:
http://blog.csdn.net/hai_qing_xu_kong/article/details/53556243
本文出自:【顾林海的博客】
初始化指针变量为nil,程序输出0x0,这时在栈中的today变量值为0x0,而在堆上没有任何对象。
继续看下面实例:
这时创建了一个NSDate实例,today指向这个实例,不再指向nil。堆上面保存着一个NSDate对象。
当堆中的对象没有被引用,这时就应该销毁。
自动销毁不被引用的对象的机制称为ARC,ARC是自动引用计数的简称。每个对象都会对指向自己的指针进行计数,当引用计数为0时,就会认为不需要该对象了。如果项目开启了ARC,编译器会自动给项目添加代码来计算每个对象的引用数。
只要有一个指针指向对象,这个对象就会继续存在。因此调用free()函数来销毁对象是清理最干净的方法。如果不再需要某个对象,则可以将指向它的指针设置成nil,或者销毁它的指针。
http://blog.csdn.net/hai_qing_xu_kong/article/details/53556243
本文出自:【顾林海的博客】
前言
Object-C的内存管理机制与java那种全自动的垃圾回收机制是不同的,它本质上还是c语言的手动管理方式,只不过稍微加了一些自动方法。指针和指针的值
以下程序声明一个指向NSDate实例的变量:#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSDate *today=nil; NSLog(@"%p",today); } return 0; }
初始化指针变量为nil,程序输出0x0,这时在栈中的today变量值为0x0,而在堆上没有任何对象。
继续看下面实例:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSDate *today=[NSDate date]; NSLog(@"%p",today); } return 0; }
这时创建了一个NSDate实例,today指向这个实例,不再指向nil。堆上面保存着一个NSDate对象。
内存管理
栈是由有序的帧构成的,函数的帧在函数结束后会自动释放,而堆里的对象不会自动释放。因此管理堆很重要,程序占用堆大小是有限的。而每个对象被创建后都会占用一定的堆内存,如果系统内存不足,mac应用的运行效果就会变差,而ios应用就会崩溃。当堆中的对象没有被引用,这时就应该销毁。
自动销毁不被引用的对象的机制称为ARC,ARC是自动引用计数的简称。每个对象都会对指向自己的指针进行计数,当引用计数为0时,就会认为不需要该对象了。如果项目开启了ARC,编译器会自动给项目添加代码来计算每个对象的引用数。
只要有一个指针指向对象,这个对象就会继续存在。因此调用free()函数来销毁对象是清理最干净的方法。如果不再需要某个对象,则可以将指向它的指针设置成nil,或者销毁它的指针。
相关文章推荐
- IOS开发笔记10-Object-C中的对象
- iOS开发笔记(五)Phone内存泄露:Leaks工具指引
- iOS开发笔记-object-c之 @[], @{}
- iOS开发学习之内存管理笔记简述
- [iphone 开发学习笔记]Object-C和C语言最大的区别也是最大的扩展-----消息(即如何调用一个对象中的函数)
- iOS开发笔记(五)Phone内存泄露:Leaks工具指引
- iOS开发笔记1 - 内存管理
- iOS开发学习笔记-创建和初始化对象
- IOS开发学习笔记027-UITableView 使用模型对象
- [海康开发笔记]将内存片段格式化为C#类对象时需要注意对象的字段顺序
- iOS开发笔记之多点触控(四) 可靠的多点触控,为每个View分配唯一触摸对象
- IOS开发笔记(12)IOS如何访问通讯录
- ios开发日记-12 sdwebImage内存泄露
- ios开发笔记之 内存警告问题
- 【学习笔记之ios开发】1.Object-C语法概述
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
- IOS开发笔记16-类与对象
- IOS开发笔记12-指针(下)
- iOS开发学习笔记三 —— 内存管理