iOS5 SDK - ARC 和内存管理

Posted

技术标签:

【中文标题】iOS5 SDK - ARC 和内存管理【英文标题】:iOS5 SDK - ARC and memory management 【发布时间】:2012-01-13 18:32:20 【问题描述】:

Q)是否要求所有接口类都从超类继承? Q) 在下面的代码中 - 从带有 ARC 的 ios5 开始,我还需要做吗(播放器是 NSMUtable 数组),除非我错了我相信在 ARC 之后我们不需要保持引用计数:

//这需要吗? 播放器 *player = [[播放器分配] init];

players = [NSMutableArray arrayWithCapacity:20];
Player *player = [[Player alloc] init];
player.name = @"Bill Evans";
player.game = @"Tic-Tac-Toe";
player.rating = 4;
[players addObject:player];
player = [[Player alloc] init];
player.name = @"Oscar Peterson";
player.game = @"Spin the Bottle";
player.rating = 5;
[players addObject:player];
player = [[Player alloc] init];
player.name = @"Dave Brubeck";
player.game = @"Texas Hold’em Poker";
player.rating = 2;
[players addObject:player];

Q) 关于制作接口文件和实现文件子类的规则是什么,即在 java 中,所有内容都派生自 OBject 类,所以我们是否为实现 / 接口类或不需要的类声明 NSObject 以及我将在哪里定义这个?

Q) 哪一个是推荐的解决方案 A: 玩家 *player = [[Player alloc] init]; 或者 B: 玩家 *player = [[新玩家]; //除非这是非法的?

Q) ARC 是否仅适用于 Mac OS X 应用程序或 iOS,即 iphone / touch 等,还是我们仍需要手动管理内存?

Q) 单例模式可以应用于 Objective-c、cocoa touch iphone 应用吗?

【问题讨论】:

【参考方案1】: 您必须执行[[Player alloc] init] 来实例化对象 始终从 NSObject 派生您的类,除非您想专门从其他类派生 [[Player alloc] init] 等价于 [Player new],但前者是首选,因为您可以轻松更换另一个初始化程序,例如 [[Player alloc] initWithName:@"John Doe"] ARC 在 iOS 和 Mac 上都可用,应该使用它来代替垃圾收集,这在某种程度上已被弃用 我不明白为什么你不能在 iOS 上创建单例

【讨论】:

>> 总是从 NSObject 派生你的类,除非你想专门从其他类派生 - 我明白这一点,但我想我想问的是我们是明确定义它还是编译器需要在乎吗? - 至于单例模式,我在这方面找不到可靠的 iOS5 代码有什么想法吗?看着 > [[Player alloc] initWithName:@"John Doe"] 我有点迷路了 initWithName 是 NSMuttable 数组类上的一个方法。 @RedMan NSObject 是 Cocoa 的一个基本类,但您不需要从它派生。如果您不明确执行此操作,您将无法获得它提供的功能 (developer.apple.com/library/prerelease/ios/#documentation/Cocoa/…)。至于单例,我不明白为什么它应该与非 iOS 环境不同,请参阅此问题,例如 ***.com/questions/145154/… 只需添加供他人参考 类方法是理想的,也是使用单例模式的唯一方法。 “唯一的方法”?这有点极端。这是最常见的模式,是的。作为参考,我在这里描述了一种实现该模式的常用方法:***.com/questions/8671784/… 至于另一个问题,您可能希望有一个非常具体的理由来创建一个新的根类(即不传递地继承 Obj-C 类NSObject 或 NSProxy。)这不是一种实践,有很多强有力的案例。 根类? - 不是 NSObject 和 NSProxy 将是超级类的根,所以无论如何你都不能替换根类。如果你说根类时能解释一下,我现在有点困惑

以上是关于iOS5 SDK - ARC 和内存管理的主要内容,如果未能解决你的问题,请参考以下文章

ARC以前的故事

iOS内存管理机制解析之MRC手动引用计数机制

编译器特性ARC

25 优化技巧

iOS优化内存方法推荐

iOS性能优化/内存优化常用方法