2012-10-08 17 views
5

Tôi đã sử dụng các công cụ để tìm phân bổ không được phát hành đúng cách. Tôi có MKMapViewDelegate thêm một bản đồ thông qua một phương thức thể hiện sau khi nó đã được khởi tạo. Tôi có thể thấy trong cây gọi rằng phương pháp này giữ lại khoảng 300KB bộ nhớ, sau khi ViewDelegate được phát hành. Tôi nhận xét ra thịt của mã và nó ảnh tĩnh duy trì bộ nhớ chỉ với dòng này:MKMapView initWithFrame không giải phóng bộ nhớ với ARC

self.map = [[MKMapView alloc] initWithFrame:CGRectMake(10, 210, 300, 125)]; 

tôi nhìn trong danh sách đối tượng và MKMapView bản thân không phải là sống, nhưng như tôi tiếp tục tạo ViewDelegates mới, mà bộ nhớ tiếp tục tăng lên. Sau đây là cách bản đồ được định nghĩa:

@property (strong, nonatomic)  MKMapView *map; 

đại biểu của bản đồ được thiết lập để nil, cũng như tài liệu tham khảo trên của ViewDelegate dealloc

self.map.delegate = nil; 
self.map = nil; 
+0

Cách sử dụng bản phát hành thay vì số không. Bạn có thể kiểm tra xem bạn có kết thúc không? –

+2

@ S.P. họ đang sử dụng ARC, không có bản phát hành. –

+0

@ S.P. không ai khác nói đến tài sản đó, đúng không? Không có gì khác có khả năng giữ một tài liệu tham khảo? –

Trả lời

1

Khi bạn thiết lập các đại biểu để nil, có không còn bất kỳ con trỏ nào và iOS sẽ phát hành nó khi muốn. iOS có thể không giải phóng bộ nhớ ngay lập tức sau khi đặt nó thành không.

Hãy nhớ rằng bạn đang xóa con trỏ bằng cách đặt nó thành 0, nhưng đối tượng vẫn còn trên heap, về cơ bản không làm gì cả, cho đến khi có thứ gì khác được phân bổ ở đó.

(Tôi giả sử bạn cũng đã xóa MKMapView khỏi người giám sát bằng cách sử dụng [self.map removeFromSuperView]).

+0

Các thiết bị có nhận ra bộ nhớ thực sự sống và đang được sử dụng không? Tôi hiểu rằng trong các đối tượng bộ nhớ tồn tại cho đến khi ghi đè nhưng không phải là điểm của các công cụ là nó cho thấy những gì vẫn còn được tham chiếu bởi ứng dụng và do đó bộ nhớ đó không thể được phân bổ lại? Tôi có mã có removeFromSuperView nhưng đã được nhận xét, cùng với nó được thêm dưới dạng chế độ xem phụ. – spedly