今天有空想学习一下objective-c的内存管理的知识就上网查了一些文章.
下面的这种方式是不对的
Instance you don’t own is sent release
- (void)reset {
NSNumber *zero = [NSNumber numberWithInteger:0];创建的是一个autorelease的对象
[self setCount:zero];
[zero release];//这里释放是危险的
}
When you add an object to a collection such as an array, dictionary, or set, the collection takes ownership of
it.在集合中增加object,那么这个object的所有者就变成了集合了
代码
// ...
for (i = 0; i < 10; i++) {
NSNumber *convenienceNumber = [NSNumber numberWithInteger:i];
[array addObject:convenienceNumber];
}
//这种情况不需要release
NSMutableArray *array;
NSUInteger i;
// ...
for (i = 0; i < 10; i++) {
NSNumber *allocedNumber = [[NSNumber alloc] initWithInteger: i];
[array addObject:allocedNumber];
[allocedNumber release];
}
//这种情况需要,此处只是将retain的计数减1而已
*******************************************
安全返回对象
下面两种方式是正确的
- (NSString *)fullName {
NSString *string = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
return string;
}
- (NSString *)fullName {
NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@", firstName,
lastName] autorelease];
return string;
}
相反,下面的方式是错误的
(NSString *)fullName {
NSString *string = [[[NSString alloc] initWithFormat:@"%@ %@", firstName,
lastName] release];
return string;
}
同样,下面的方式也是错的
(NSString *)fullName {
NSString *string = [[NSString alloc] initWithFormat:@"%@ %@", firstName,
lastName];
return string;
}
分享到:
相关推荐
《Objective-C高级编程:iOS与OS X多线程和内存管理》是一本深入探讨Apple平台开发中的关键技术的书籍。本书主要围绕Objective-C语言在iOS和OS X操作系统上的应用,特别是针对多线程和内存管理这两个核心主题进行...
Objective-C的内存管理是一种重要的编程技能,它对于创建出色的应用程序至关重要。在深入探讨Objective-C内存管理之前,让我们以日常生活中的比喻来形象说明内存管理的过程:当我们在家中自己做饭时,需要亲自处理...
Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 Objective-C语言入门教程&深入浅出,理论实践相结合 ...
1. Objective-C版本:文中提到了Objective-C11,这是指Objective-C语言的一个版本,随着编程语言的不断更新,版本号会有所变化,但通常指的是支持最新特性的Objective-C语言。 2. HelloWorld程序:这是任何编程语言...
"第八讲 内存管理"是Objective-C开发中非常重要的一个环节,讲解了自动引用计数(ARC)和手动内存管理(MRC)的原理,以及如何避免内存泄漏。 最后,"第九讲 Foundation框架"介绍了苹果的基础框架,它提供了一系列...
Objective-C的内存管理机制与.NET和Java等语言中常见的自动垃圾回收机制不同,它更接近于C语言的手动管理方式,但在此基础上加入了一些自动化手段,使得开发人员能够在一定程度上简化内存管理的工作。 ##### 1. ...
1. **创建gcc.sh脚本**:在Objective-C代码所在的文件夹中创建一个名为`gcc.sh`的文件,内容如下: ```bash gcc -o "$1" "$2" -I/GNUstep/System/Library/Headers -fconstant-string-class=NSConstantString -L/...
Objective-C 2.0引入了属性声明的概念,这是一种简化属性访问和管理的方式。属性声明使开发者能够轻松地为对象定义属性,并控制这些属性的存取方式。属性还可以指定合成(synthesis)属性,这使得编译器能够自动生成...
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...
Objective-C内存管理是iOS开发中非常重要的一部分。在早期的Objective-C中,内存管理是通过引用计数(Reference Counting)的方式进行的,开发者需要手动对对象的引用进行管理。内存管理的基本原则可以概括为“谁...
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
C语言是计算机编程的基础,它是Objective-C的重要基石。在学习Objective-C之前,深入理解C语言的知识点至关重要。C语言以其高效、简洁和灵活性被广泛应用于系统编程、嵌入式开发、游戏引擎等领域。本资料主要涵盖了...
- **内存管理**:Objective-C使用ARC(Automatic Reference Counting),而C++使用自己的内存管理规则。在混用时要特别注意内存泄漏问题。 - **命名冲突**:C++的命名空间和Objective-C的类别可能会引起命名冲突,...
5. **内存管理**:Objective-C使用引用计数进行内存管理,书中会详细解释如何正确地持有和释放对象,以避免内存泄漏。 6. **NSObjects和协议**:Objective-C中的NSObject类是所有其他类的基类,书中会讲解它的方法...
### Objective-C内存管理教程和原理剖析 #### 一、前言 Objective-C 是一种面向对象的编程语言,广泛应用于苹果的 macOS 和 iOS 开发中。由于 Objective-C 的内存管理机制与现代高级语言如 Java 或 .Net 的自动垃圾...
《Objective-C 程序设计(第4版)》已经为iOS 5和Xcode4.2中的重大变更做了全面更新,最大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。
4. **Foundation框架**:介绍Objective-C开发中最常用的Foundation框架,包括字符串处理、集合类(NSArray, NSDictionary等)、内存管理等基础工具的使用。 5. **Cocoa Touch**:对于iOS开发,会讲解Cocoa Touch...
Objective-C语法的基石是C语言的语法结构,这意味着所有的C语言代码都可以在Objective-C中直接使用。但是,Objective-C在C的基础上新增了消息传递机制,这是它与C语言的一个重要区别。在Objective-C中,方法调用是...
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写...
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,添加了面向对象特性。它的基础包括类、对象、消息传递等概念。类定义了对象的属性和行为,对象则是类的实例。消息传递是Objective-C的核心,通过`...