内存管理:
1、一个对象的所有者可能不止一个。
2、你拥有通过alloc、new或copy(通过名字以“alloc”或“new”开头或名字中包含“copy”的方法)的对象的所有权。
3、如果向一个对象发送了一条retain
消息,则获得该对象的所有权。
4、需要向使用release或autorelease释放对象的所有权。
共享对象的有效性:
cocoa的所有权策略规定,被接受的对象通常在整个调用方法的作用域内保持有效。但有如下例外
1、若对象属于某集合,但该对象在集合中被删除。
obj = [array objectAtIndex:n];
[array removeObjectAtIndex:n];
// 此时obj是无效的
当对象从一个基本的集合中删除时,会向该对象发送一条release消息。如果集合是该对象的唯一所有者,则释放该对象。
2、当“父对象”被收回的时候
obj = [parent child];
[parent release];
// 此时obj是无效的
通常情况下,类内的属性都会在该类的dealloc方法中release掉,所以如果parent是obj的唯一所有者,parent在release的时候会释放掉obj的内存空间。
解决方法,在获取对象的时候调用retain方法即可:
obj = [[array objectAtIndex:n] retain];
Web视图:
1、如果需要结合客户端与webview进行开发,需要在html中加入以下meta,告诉safari整个页面的宽度(单位:像素)
<meta name="viewport" content="width=320"/>
其他:
1、把精力放在用户能够看得见的地方
2、多使用property,少声明成员变量
3、使用()作为Category,而不是(Private)的Category
4、dealloc写在@synthesize后面,可以较明显的一一对应
5、
错误:
[foo release];
foo = [newVal retain];
正确:
if (foo != newVal) {
[foo release];
foo = [newVal retain];
}
简洁:
[foo autorelease];
foo = [newVal retain];
6、不要在viewDidLoad中初始化数据。viewDidLoad可能会被调用多次,而viewDidUnload可能不会被调用一次
7、NSNotificationCenter中注册多个通知后,要逐一remove掉,如果直接使用[[NSNotificationCenter defaultCenter] removeObserver:self]remove的话,可能会remove掉父类注册的通知,就算父类是UIViewController,也会remove掉父类的Memory Warning通知。
PS:学习笔记,遇到值得记录的东西,记录之
分享到:
相关推荐
obj-c, win 环境下的 makefile 和简单的程序,自己用的
个人学习objective-c和xcode helloworld 笔记,比较了objective-c 和C++ JAVA的一些区别
obj-c2.0大全
模型格式转换工具(osgb-obj-ive) 可在osgb、ogb、obj、ive间转换,亲测可用。
revit导出obj功能MIT协议随意使用。.net C#工程 导出 obj +mtl文件 并且较少 原有revit大小(导出信息减少非轻量化)
Yahoo开源的在线obj-c -> swift工具
OBJ-socket.OBJ-socket.
SVGQuartzRenderer is a basic SVG renderer written in Obj-C that uses CoreGraphics to render SVG files. The goal of SVGQuartzRenderer is to be a simple drop-in SVG renderer that is compatible with the ...
Objective-C 2.0之前需要了解的:关于Obj-C内存管理的规则。
Objective-C+2.0之前需要了解的:关于Obj-C内存管理的规则
SVGQuartzRenderer is a basic SVG renderer written in Obj-C that uses CoreGraphics to render SVG files. The goal of SVGQuartzRenderer is to be a simple drop-in SVG renderer that is compatible with the ...
WebViewJavascriptBridge-用于在UIWebViews/WebViews中Obj-C和JavaScript互通消息的iOS/OSX桥梁
python库。资源全名:dj-obj-update-0.4.0.tar.gz
前端开源库-obj-flatten对象展平,将嵌套对象转换为展平对象。
一個客製化的Obj-C數字選擇器
0136-OBJ-100014011管道&配件焊接规范[借鉴].pdf
java-obj-to-opengl Java class that reads and converts a wavefront .obj 3d model file to java object. The result object will contain all the necessary data for render of the 3d model with OpenGL ES on ...
3D-obj-viewer.zip,简单的obj文件查看器。,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。
JavaScriptTalkNativeEasy 是一个iOS平台用于Obj-C和JavaScript交互的库,此库是基于 Apple 的JavaScriptCore 、 WebKit 、 runtime进行封装的。
obj文件解析器开源,可重用的Wavefront 3D对象文件(.OBJ)解析器,以javascript编写,并作为NPM软件包自由分发。特征仅支持(.OBJ)文件,请参阅mtl-file-parser以获取mtl文件不区分大小写,灵活的解析器简单的JS...