2010-06-07 24 views
8

Sử dụng xây dựng và phân tích của XCode tôi thấy tôi có một rò rỉ bộ nhớ trong mã của tôi:rò rỉ tiềm năng của một đối tượng được phân bổ

- (NSString *) doIt 
{ 
    NSString *var = [[NSString alloc] init]; 

    return var; 
} 

Đây là khóa học một đoạn đơn giản của vấn đề của tôi

nơi làm tôi giải phóng đối tượng?

Trả lời

18

Đây là tình huống hoàn hảo cho autorelease.

return [var autorelease]; sẽ trả về đối tượng với số lượng giữ lại hiện tại là 1 và giảm số lần giữ lại đối tượng tại một số điểm trong tương lai, sau đó mã gọi sẽ giữ lại đối tượng nếu cần.

+1

Đó là yếu tố quyết định - đối tượng sẽ được giải phóng khi kênh tự động thoát nước hiện tại bị cạn kiệt. Nó không chỉ quan trọng vì đối tượng không còn là trách nhiệm của bạn và nó không được đảm bảo trong suốt thời gian của phương pháp của bạn miễn là bạn không tự tạo hồ bơi. – Chuck

+0

Đó là sự lựa chọn từ nghèo nàn. Tôi giả định rằng đối tượng của OP sẽ đi vào hồ bơi autorelease mặc định và như vậy, anh ta sẽ không thể kiểm soát được khi nó được phát hành. Đã sửa ở trên. – warrenm

+0

có đúng với ARC không? – UserDev

Các vấn đề liên quan