除了对象的不同方法的对象范围可能需要使用这样的对象之外,是否有一个原因:
@interface
...
ViewMgmtAppDelegate : NSObject <UIApplicationDelegate> {
Obj *obj1;
...
}
@end
@implementation
- (void)applicationDidFinishLaunching:(UIApplication *)application {
obj1 = [Obj alloc];
[window addSubview:obj1];
...
}
- (void)dealloc {
[obj1 release];
...
}
@end
而不是:
@interface
...
ViewMgmtAppDelegate : NSObject <UIApplicationDelegate> {
...
}
@end
@implementation
- (void)applicationDidFinishLaunching:(UIApplication *)application {
Obj obj1 = [Obj alloc];
[window addSubview:obj1];
[obj1 release];
...
}
- (void)dealloc {
...
}
@end
哪种方式更有效率?
任何帮助赞赏//:)
答案 0 :(得分:1)
如果在视图加载完成后将使用obj1,您将使用第一个示例。例如,在点击事件之后。
如果不是这种情况,将使用第二个例子。因此在发布后不再需要Obj1,也不需要使用iPhone的RAM。
答案 1 :(得分:1)
我假设您在询问是否应该在addSubview
之后或dealloc
之后发布对象。
这取决于应用程序逻辑以及addSubview
的作用。如果addSubview
保留了对象,则可以在通话后立即将其释放,如果您在其他对象中不需要它。
当window
完成它并释放将被释放的对象时,如果没有其他对象持有对它的引用。
如果另一方面你保留引用,直到你的对象被释放,那么对象将会一直存在,直到你的对象被释放为止。
如果您不需要,请立即释放。
顺便说一下,创建和实例的正确方法是调用:
Obj * o = [[Object alloc] init]
Alloc
分配内存,init
(或任何其他init ...方法)初始化对象(我相信)。
答案 2 :(得分:1)
如果该对象仅由该方法使用,则它应该是局部变量并在该方法中释放(如第二个示例中所示)。如果它是其他方法使用的类的属性,则应将其存储在实例变量中,并在拥有对象消失时释放(如第一个示例中所示)。