2011-08-25 20 views
5

Tôi có phương thức trả về số CGPath và đang tạo cảnh báo phân tích. Phương thức được khai báo trong một giao thức. Đây là một thực hiện ví dụ mà được tạo ra cảnh báo:Tôi nên tránh cảnh báo bộ nhớ này như thế nào?

"rò rỉ tiềm năng của một đối tượng được phân bổ trên dòng 47 và lưu trữ vào 'con đường'":

- (CGPathRef)createPathForBounds:(CGRect)bounds key:(NSString *)key; 
{ 
    if ([key isEqualToString:OvalColumn]) 
    { 
     CGPathRef path = CGPathCreateWithEllipseInRect(bounds, NULL); 
     return path; 
    } 

    return NULL; 
} 

Dưới đây là ví dụ sử dụng đó là tạo cảnh báo, "Giảm không chính xác số lượng tham chiếu của đối tượng không được sở hữu tại thời điểm này bởi người gọi"

CGPathRef path = [self.delegate createPathForBounds:bounds key:someKey]; 

// Use the path to do some drawing 

CGRelease(path); 

Quản lý bộ nhớ của tôi là correc t; Tôi đang quay trở lại một giữ lại CGPath từ phương pháp giao thức của tôi và tôi phát hành nó trong khối gọi, vì vậy tôi biết các cảnh báo có thể được bỏ qua, nhưng tôi muốn loại bỏ chúng hoàn toàn.

Tôi có thiếu quy ước đặt tên để làm cho máy phân tích hài lòng không? Các hàm có thể được định nghĩa trong các giao thức không? Phân lớp sẽ hoạt động như thế nào?

+1

Bạn có thể tiết lộ từ ngữ của cảnh báo bạn đang nhận được hay chúng tôi phải đoán? –

+0

Lời xin lỗi của tôi. Đã cập nhật. – kubi

+0

Điều gì sẽ xảy ra nếu bạn đổi tên phương thức thành pathForBounds: key: ?? –

Trả lời

5

- (CGPathRef)newPathForBounds:(CGRect)bounds key:(NSString *)key

một lưu ý chi tiết về chủ đề này có thể được tìm thấy here

cách khác, bạn có thể chọn để sử dụng thuộc tính cf_returns_retained, nhưng tốt nhất (IMO) để ủng hộ quy ước đặt tên.

+0

Đẹp. Vì vậy, rõ ràng trong hindsight. – kubi

+0

Tôi không biết tại sao anh ta lại bị bỏ phiếu. Đây hoàn toàn là câu trả lời đúng. Máy phân tích đang làm việc với các quy ước đặt tên phương thức. Thay đổi tên thành "newPathForBounds" cho trình phân tích (và bất kỳ nhà phát triển nào sử dụng nó) chính xác những gì phương thức này đang làm - và bạn nên mong đợi một đối tượng được giữ lại để nhổ ra phía bên kia. – Steve

+0

Tôi chỉ giả định các phương thức trả về các đối tượng Foundation đã sử dụng các quy ước đặt tên Foundation. Tôi cũng không biết tại sao điều này lại bị bỏ phiếu. – kubi

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