内存管理:
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:学习笔记,遇到值得记录的东西,记录之
分享到:
相关推荐
学习 Objective-C,不仅要掌握语法,还要理解其运行时系统和苹果提供的框架,如 Foundation 框架,这些都对于开发 iOS 和 macOS 应用至关重要。在实践中,不断编写代码和调试将是深化理解的最佳途径。
**Object-C 学习笔记** Objective-C(简称Obj-C或Objective C)是苹果公司基于C语言开发的一种面向对象编程语言,主要用于iOS和macOS平台的应用程序开发。它在C语言的基础上添加了Smalltalk风格的消息传递机制,...
【C语言学习笔记】 C语言是一种强大的编程语言,它的学习笔记涵盖了从基础知识到高级特性的全方位内容。在学习C语言时,首先需要了解文件类型,如C语言的源文件通常以`.c`为扩展名,而C++源文件是`.cpp`。头文件`.h...
这个"ios学习笔记---simpleping"旨在帮助初学者理解如何在iOS应用中实现简单的网络探测功能。 SimplePing是一个基于Objective-C的类,它提供了对ICMP(Internet Control Message Protocol)协议的支持,这个协议被...
Objective-C(简称Obj-C或Objective-C)是苹果公司基于C语言构建的一种面向对象的编程语言,广泛应用于iOS和Mac OS X操作系统。本教程将深入探讨Object-C的基础概念、语法特性以及实际开发中的应用,旨在帮助初学者...
C语言学习笔记——小浪神 本笔记是关于C语言的学习笔记,涵盖了C语言的基本概念、历史发展、语言特点、数据类型、变量、常量、算法等方面的知识点。 计算机程序的概念 计算机程序是指一组能够被计算机识别和执行...
《C语言学习笔记》初识C语言1 C语言是一种广泛应用的高级编程语言,它以其简洁、高效的特点深受程序员喜爱。本章节将介绍C语言的基本概念以及如何开始编写C语言程序。 1. 基本概念 - **程序**:程序是由一系列...
### 机器人仿真 V-REP 入门笔记-上 #### V-REP简介 V-REP (Virtual Robot Experimentation Platform),即虚拟机器人实验平台,是一款强大的机器人模拟器与集成开发环境。它采用分布式控制架构,允许每个对象或模型...
嵌入式学习是针对嵌入式系统的专业学习领域,涉及硬件和软件...以上内容是对“嵌入式学习笔记1.1.pdf”文件中提取的知识点的详细说明,涉及了嵌入式系统开发的多个方面,为学习和掌握嵌入式系统开发提供了丰富的资料。
KeyShot不需要依赖其他三维建模软件,它可以独立运行,支持多种3D文件格式,包括但不限于PTC Creo、SketchUp、SolidWorks、RHINO、Pro/E、IGES、C4d、OBJ、3ds、Collada和FBX等。这意味着用户可以在不同的三维建模...
### MAKE 学习笔记知识点详解 #### 一、Make 的基本概念 - **Make 的作用**:`Make` 是一种自动化构建工具,主要用于管理程序的编译过程,它通过读取一个名为 `Makefile` 或 `makefile` 的文件来决定如何编译和...
- **源文件**: 源文件是编写C语言程序的基础,扩展名为`.c`。例如,`example.c`。 - **头文件**: 头文件通常包含函数声明、宏定义等,用于被多个源文件共享。扩展名为`.h`,如`example.h`。 - **库文件**: 库文件...
- **源文件**:C语言的源文件扩展名为`.c`,而C++的源文件扩展名为`.cpp`。 - **头文件**:扩展名为`.h`,通常包含函数声明、宏定义等。 - **库文件**:动态链接库文件扩展名为`.dll`,主要用于存储可被多个程序共享...
### 高质量C++编程指南知识点总结 #### 1. 布尔变量的比较 在C++中,不应该直接将布尔变量与`TRUE`, `FALSE`或`1`, `0`进行比较。...以上总结了《高质量C++编程指南》中提到的关键知识点,希望对您的学习有所帮助。
### Java与C++交互(JNI学习笔记) #### 一、Java类型与C/C++类型对应关系 在Java Native Interface (JNI) 中,Java 和 C/C++ 的数据类型有着明确的对应关系。理解这些对应关系是实现Java与C++交互的基础。 - **...