释放可能尚未创建的对象

Jac*_*mes 1 memory-management objective-c

在我阅读的大多数教程中,都有使用自定义init方法的类的示例.

例如

@implementation MyPerson

-(id) initWithDefaultName {
self = [super init];
if (self) {
NSString *name = [[NSString alloc] initWithString:@"John Doe"];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道我应该配对它

-(void) dealloc
{
[name release];
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

然而,我不明白的是,如果我[MyPerson init]跟着打电话,这不会崩溃的原因[MyPerson release]

编辑:阅读下面的评论,我意识到上面的示例代码不太正确.我得到的是我的自定义initWithName方法分配并初始化一个init在调用标准方法时不存在的对象.所以我的dealloc方法包含释放它的代码,但即使从未创建名称对象,这仍然有效吗?

omz*_*omz 5

实例变量的默认值为nil.发送消息nil无效.