2012-03-18 30 views
18

Trong ứng dụng của tôi, tôi có chế độ xem cuộn và bốn chế độ xem bảng. Mỗi lần một được kéo và sau đó phát hành, tôi nhận được một rò rỉ 48 byte. Điều này thực sự tăng lên. Như bạn có thể thấy, cả hai nhóm rò rỉ đều có cùng nguồn. Có ai nhìn thấy một rò rỉ như thế này trước đây không?Rò rỉ bộ nhớ mỗi lần UIScrollView được phát hành




Sửa 1:

Khi tôi bấm vào mũi tên bên cạnh rò rỉ, tôi nhận được thông tin này cho các rò rỉ:

Trả lời

28

Điều bạn đang thấy là lỗi đã biết trong iOS 5.1 và đang được thảo luận trong Diễn đàn nhà phát triển iOS như vậy. Bạn có thể tìm thấy các chủ đề liên quan bằng cách tìm kiếm trong các diễn đàn cho "strdup". Xem chủ đề có tiêu đề "Yếu tố bộ nhớ ứng dụng rò rỉ". Tìm kiếm bài đăng từ một nhân viên của Apple.

+0

Ah, tôi hiểu rồi. Hình như không có gì có thể được thực hiện vào cuối này. Cảm ơn vì sự trả lời! –

+0

Chắc chắn, đó là những gì Stack là tất cả về ... nhận được câu trả lời! –

0

Rất có thể, đó là lỗi của bạn, bằng cách nào đó.

Trong công cụ Phân bổ, nhấn nút "i" và bật "Ghi số tham chiếu". Sau đó, Công cụ có thể hiển thị cho bạn tất cả phân bổ, giữ lại, tự động phát hành và phát hành các sự kiện đã xảy ra với các đối tượng đó. (Bạn sẽ thấy một mũi tên bên cạnh mỗi mục bị rò rỉ - nhấp vào mũi tên đó để hiển thị lịch sử phân bổ của đối tượng đó.)

Tôi nghĩ rằng một số mã của bạn đang giữ lại thứ gì đó hoặc gián tiếp khiến nó trở thành giữ lại. Có lẽ là chế độ xem cuộn hoặc một trong các trình nhận dạng cử chỉ của nó, như một sự đoán.

+0

Ghi Reference Đếm được bật, nhưng làm thế nào để tôi nhìn thấy các đối tượng bị rò rỉ từ bên trong phân bổ? Tôi có thể thấy các vật bị rò rỉ trong Rò rỉ (duh), nhưng tôi không thể nhìn thấy nơi chúng được giữ lại/giải phóng/tự động phát hiện. –

+0

Tôi vừa thử sử dụng Xcode 4.3.1, sử dụng cài đặt trước "Rò rỉ" trong Dụng cụ. Số lượng tham chiếu hồ sơ đã được bật. Trong danh sách các đối tượng bị rò rỉ, trong cột "Địa chỉ", có biểu tượng mũi tên - nhấp vào đó để hiển thị lịch sử của địa chỉ đó. Nếu mũi tên không hiển thị, tốt nhất tôi có thể đề nghị là để chơi với các thiết lập trong Instruments. –

+0

Tìm thấy nó, nhưng thông tin không vô cùng hữu ích. Chỉnh sửa trong kết quả của tôi. –

0

Giải pháp thay thế:

Tôi nhận ra rằng bằng cách nào đó các byte bị rò rỉ này được lưu trữ trong scrollview. Bạn phải phát hành scrollview của bạn và phân bổ nó một lần nữa theo thời gian, giữ trạng thái của nó. Cách bạn phát hiện khi bạn tải lại chế độ xem cuộn tùy thuộc vào bạn, tùy thuộc vào nhu cầu ứng dụng của bạn. Mỗi khi bạn phát hành scrollview, các byte này cũng được phát hành.

+0

Không, tôi có chế độ xem cuộn và chế độ xem bảng được phân bổ và dealloc'd theo thời gian và điều đó không khắc phục sự cố rò rỉ. Giải pháp đơn giản là chờ đợi bản sửa lỗi chính thức trong ios. –

0

Cách giải quyết: Tôi thấy rằng rò rỉ bộ nhớ xảy ra trong handlePan: nếu đại biểu UIScrollView được đặt. Tôi cần các phương thức đại biểu, vì vậy tôi đã phân lớp UIScrollView và khai báo @protocol của riêng tôi. Sau đó, tôi gạt chọn mục tiêu cho scrollview panGestureRecognizer, mà không gửi nó đến siêu:

//yourScrollView.h 
@protocol yourScrollViewDelegate 
-(void)yourProtocol; 
@end 

//yourScrollView.m 
-(void)handlePan:(id)sender{ 
    [yourDelegate yourProtocol]; 
}