我正在学习内存管理一段时间。阅读 Apple 的内存管理指南以及其他一些作者的书/博客/文章/帖子。
仍然让我困惑的是我是否应该写:
nameOfMySynthesizedProperty = [[NSObject alloc] init]; // version 1
或者
nameOfMySynthesizedProperty = [[[NSObject alloc] init] autorelease]; // version 2
在一个示例项目中,使用手动内存管理并且没有任何dealloc
方法,并且版本 1 用于所有类属性/ivars。有时甚至没有合成某些属性,但使用了它的吸气剂,
我读过的那些教程/指南中没有教授这些内容,但是该示例项目运行良好,没有崩溃......
任何人都可以给我一些光...
更新 1
示例项目中使用手动内存管理。
更新 2
另一个例子
AppDelegate.h
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UIViewController *viewController;
@end
AppDelegate.m
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// To be inserted with the following choices of code
}
@end
在AppDelegate.m
->-(BOOL)application:application didFinishLaunchingWithOptions:
方法中,以下哪项对于初始化是正确的self.window.rootViewController
?(使用手动内存管理。使用 Xcode 5。)
版本 1
self.window.rootViewController = [[UIViewController alloc] init];
self.viewController = [[[UIViewControllerDrawer alloc]init] autorelease];
self.window.rootViewController = self.viewController;
版本 2
self.window.rootViewController = [[[UIViewController alloc] init] autorelease];
self.viewController = [[[UIViewControllerDrawer alloc]init] autorelease];
self.window.rootViewController = self.viewController;
版本 3
self.viewController = [[[UIViewControllerDrawer alloc]init] autorelease];
self.window.rootViewController = self.viewController;
这里我知道window
是一个属性(它的实例变量也被命名为window
)。但是是window.rootViewController
实例变量吗?实验结果表明版本 3 正常工作,版本 1 和版本 2 都崩溃了。