转载说明(谢谢)
http://blog.csdn.net/a21064346/article/details/7785535
对于 内存分配的掌握,对于一个ios程序开发来说很重要
在很多时候,我们看到一些错误都不知道为何出错,什么都是按照规范书写。
在这个时候建议你去 检查下你的 对象副职,你会又意想不到的收获。
下面说一点关于内存分配的 简单例子
NSString *text = [[[NSStringalloc] init]autorelease];
NSString *a = nil;
NSString *b = [NSStringstring];
NSString *text1 = [[[NSString alloc] init] autorelease];
NSString *a1 = nil;
NSString *b1 = [NSStringstring];
设置为nil时,a系列的变量 指针里装载的 东西 是 你所要副职变量的 地址内存
而另外两种写法,其实都会生成一个内存,只不过这个内存会在 该方法结束调用的时候,被系统release掉。不需要自己去管理释放
但是我想说明的是,如果这里的变量 不是一个简单的string,而是一个 又 成员变量 的nsobject时,你得注意:
内部的成员变量不一定是 原本的属性。如:nsmutablearray ,当它作为你的成员变量时,你进行了如下操作:
1 init NSobject类。并将内部所有成员变量 [NSMutableArray alloc] init
2给成员变量副职 NSMutableArray = NSArray
3 在使用的时候,希望在给原有副职 的 NSMutableArray 添加新的 Object 使用方法 addobject (id)
4 查看 是否成功给 NSMutable 添加新id
这样做,编译器会报错:不能 给不可变的数组,进行添加操作。
在代码写了很多的时候,你会发现 自己没错啊。我这个是 可变数组,怎么不能正常使用 add方法呢。
因为,在给自定义的NSObject类定义的时候,你采用的是 alloc 初始化变量。并且 副了一个 NSarray的内存地址给你的NSMutableArray使用
所以,你不能添加新的 obj给你的Array中。
本文详细探讨了iOS程序开发中内存分配的关键概念,包括如何正确使用alloc、init和autorelease方法,以及在对象赋值时应注意的问题,特别是对于NSObjects类的正确管理。通过实例解析,帮助开发者避免常见的内存泄露错误。
1848

被折叠的 条评论
为什么被折叠?



