objc 内存管理
1. 对象生命周期
1) 诞生: new or alloc
2) 生存: 接收消息和执行操作
3) 交友: 借助组合的方法和参数
4) 死去: 被释放
2. 方法
1) –(id) retain;
2) –(void) release;
3) –(unsigned) retainCount;
3. 引用计数
1) 每个对象都有一个与之相关联的整数---引用计数
2) 计数规则为
i. 访问+1 访问结束-1 为0 销毁
ii. 当创建或者copy的时候调用retain为计数器+1
iii. 当销毁当前对象 调用release 为计数器-1
iv. 当计数器为0的时候,objc自动调用dealloc方法,释放全部内存
v. 获取计数器得当前值 retailCount
4. 访问方法的保留和释放(复合时使用)
1) {
Mode mode
}
–(void) setMethod:(Mode *)newMode{
[newMode retain];
[mode release];
}
这个方法针对两种情况
1. mode 和 newMode 不一样。普通的set
现在mode是空的。没有初始化。 所以 mode release 没有影响,而newModw retainCount 是两次,赋给mode(现在是指针) set完后 main方法负责清理一次。 所有调用的对象那还有一次。
2. mode和newMode一样
newMode 先添加一次, 使mode变成了2,然后mode减去一次,变成了1.所以main方法可以释放掉mode
-(void) dealloc{
//释放该对象内所有的内置对象
[super dealloc];
}
5. 需要及时释放的及时释放
1) 比如NSString 在返回的时候 把NSString对象添加到 NSAutoreleasePool 里面
[str autorelease]
6. 因为有了自动释放池 所以 5的情况可以不考虑
1) 最好使用pool release 使用所有版本的mac os系统
7. 在任何时候向一个对象发送autorelease详细,该xuiduixiang都会被添加到自动释放池中。
8. Cocoa内存管理规则
Ps: iphone开发时,如果可以自己release,尽量自己管理
1) 当不再使用一个对象后,必须清理掉或者添加到自动释放池中。
2) 当你得到的对象已经设置成自动释放,则你不需要执行任何操作确保该对象被清理。如果你需要持有该对象一段时间,必须在使用后释放
3) 如果你保留了某个对象,你需要(最后)释放或者自动释放该对象,必须保持retain和release方法使用的次数相等
9. 不是自己 alloc new copy 出来的对象,不需要管理
10. 希望对放在自动释放池中的对象进行持有则需要在使用完后 retain , 在dealloc release掉他。符合内存管理规则中的retain一次必须releas一次。
11. 创建多局部变量
Objective-C程序中可以嵌套创建多个autorelease pool。在需要大量创建局部变量的时候,可以创建内嵌的autorelease pool来及时释放内存。
int main (int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i, j;
for (i = 0; i < 100; i++ )
{
NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
for (j = 0; j < 100000; j++ )
[NSString stringWithFormat:@"1234567890"];//产生的对象是autorelease的。
[loopPool release];
}
[pool release];
return (0);
} // main
12. 自动管理机制(用不上)
13. 放在集合里面对象 不用管理 , 集合销毁时对象也被销毁。
分享到:
相关推荐
Foundation框架是Objective-C语言的基础,提供了数据管理、内存管理、字符串处理、集合类等基本功能。AppKit则主要负责用户界面部分,提供了一整套丰富的控件来构建窗口和对话框等界面元素。 Core Data是Mac OS X...
《Objective-C实现MacOS编程:网络图片动态加载详解》 在iOS和MacOS应用开发中,用户界面的响应速度和视觉效果是至关重要的。当我们的应用需要显示大量网络图片时,如何有效地进行图片的动态加载,提升用户体验,就...
Swift简化了内存管理,通过**自动引用计数(ARC)**机制自动管理对象的生命周期,从而降低了开发者因手动管理内存而产生的出错几率。 ##### 2.3 框架现代化 苹果通过对现有编译器、调试器和框架基础设施的改进,为...
苹果公司通过推进现有的编译器、调试器和框架基础架构,简化了内存管理,并通过自动引用计数(ARC)实现了这一点。同时,构建在Foundation和Cocoa的坚实基础上的框架栈也得到了现代化和标准化的改进。Objective-C...
8. NSString的内存管理:包括字符串的常量缓存池、内存计数、内存释放等问题,了解NSString的内存管理对提升性能有重要作用。 9. App架构与优化:包括选择适合的架构模式如MVC,并对其进行优化,确保应用性能和可...
在iOS开发领域,Objective-C是苹果官方早期支持的主要编程语言,虽然现在Swift已经越来越流行,但Objective-C仍然是许多现有项目的基础,并且对于理解Apple的框架和API至关重要。本篇文章将深入探讨Objective-C的...
3. **自动引用计数 (ARC)**:为了简化内存管理并减少错误,Objective-C引入了自动引用计数(ARC)。ARC自动处理内存分配、初始化和释放,使得开发者无需手动管理内存。ARC通过编译器分析代码并在适当的位置插入内存...
ARC是一种内存管理技术,它为Objective-C程序员提供了自动的内存管理,极大地简化了内存分配和释放的过程,避免了常见的内存泄漏问题。libarclite库为ARC提供必要的运行时支持,尤其是针对那些不完全支持ARC的代码或...
需要注意的是,这个过程可能会遇到一些挑战,例如类型转换问题、内存管理(Java与Objective-C的垃圾回收机制不同)、以及可能的性能优化等。此外,由于iOS的封闭性,调试过程可能比在Android上更为复杂。 总结起来...
在Objective-C中,ARC(Automatic Reference Counting)自动引用计数机制大大简化了内存管理的工作,但在某些情况下,仍然需要手动管理内存。 **信息资源**:最后,《Mac_Os_Xcode开发员入门引导》还提到了信息资源...
3. **面向对象编程**:利用Objective-C或Swift语言的强大特性,如封装、继承、多态等,实现灵活且高效的代码设计。 4. **设计模式的应用**:合理应用设计模式(如工厂模式、单例模式、观察者模式等),可以解决常见...
- **NSOperation & NSOperationQueue**:Objective-C中用于封装任务和管理任务队列的类。 #### 二、线程支持 ##### 1.4.1 线程包 - **POSIX线程**:底层API,适用于C/C++,但使用较为复杂。 - **NSThread**:...
- 性能优化:提升了渲染速度和内存管理效率。 - 3D支持:增加了对OpenGL ES 3.1和3D场景图的支持。 2. GCC(GNU Compiler Collection): GCC是GNU项目的一部分,它是一套跨平台的编译器集合,支持C、C++、...
虽然EGOImageLoader主要是为Objective-C设计的,但通过桥接头文件,也可以在Swift项目中使用。 在`RTEGOImageLoaderTest`这个测试项目中,你可以找到EGOImageLoading的实际应用案例,包括如何初始化、配置加载器,...
在iOS开发中,Xcode是Apple官方推荐的集成开发环境(IDE),用于编写Objective-C或Swift的代码。针对iOS开发者,提升工作效率是非常重要的,而Xcode插件则可以帮助我们实现这一点。本文将介绍一个名为“getterMake-...
- Block是Objective-C中一种重要的编程特性,它可以像函数一样捕获上下文环境。然而,不当的Block使用会导致内存泄露。 - 需要注意Block中对对象的引用方式,避免不必要的强引用。 6. **优化UIImageView** - ...
Swift语言的引入也对逆向工程的策略和方法带来了一定影响,因为Swift与Objective-C有着不同的编译特性和内存管理模式。 至于版权信息部分,强调了版权所有者保留所有权利,未经许可不得复制、传播或使用书中的内容...