Tôi có nên luôn tự giải phóng khi có lỗi trong init hay tôi chỉ nên làm như vậy nếu tôi đã khởi tạo biến mẫu đầu tiên?Tôi có nên tự giải phóng các phương thức init không thành công không?
Để đặt theo cách khác, mẫu này có hợp lệ không? Có một thời gian khi tôi không nên tự giải phóng bản thân bên trong một phương pháp init, hay tôi nên giả định rằng nếu dòng điều khiển đi vào init, bản thân nó có ít nhất một số giữ lại là 1?
- (id)init
{
if ((self = [super init]) == nil)
{
[self release];
return nil;
}
//do some init stuff
if (somethingFailed)
{
[self release];
return nil;
}
return self;
}
Ah, dường như quá rõ ràng bây giờ mà bạn trỏ nó ra. Tôi đã được một chút ném ra bởi vì tôi đang gọi phát hành trên một đối tượng mà tôi đã không gọi alloc/copy/new etc on. – leo
Vâng, nguyên tắc cơ bản là bất kỳ ai gặp lỗi đầu tiên trong quá trình khởi tạo sẽ giải phóng không gian được cấp phát mà init đang được gọi, và sau đó sẽ trả về nil. Vì mọi người khác đều không có, họ không có cách nào giải phóng bộ nhớ, do đó tại sao bạn nên gọi phát hành trên bản thân để tránh rò rỉ bộ nhớ. –
Làm cho cảm giác, cảm ơn. – leo