Vì vậy, yeah, tôi là một anh chàng Java trong thế giới iPhone điên rồ này. Khi nói đến quản lý bộ nhớ Tôi stiill không có một ý tưởng rất tốt về những gì tôi đang làm.Làm cách nào để bộ nhớ quản lý UIViewControllers bằng bộ điều khiển điều hướng?
Tôi có một ứng dụng có sử dụng một bộ điều khiển chuyển hướng, và khi nó là thời gian để tiếp tục quan điểm tiếp theo tôi có mã trông như thế này:
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
Bây giờ theo quy tắc cơ bản của Apple về quản lý bộ nhớ
bạn lấy quyền sở hữu của một đối tượng nếu bạn tạo ra nó sử dụng một phương pháp có tên bắt đầu bằng “alloc” hoặc “mới” hoặc chứa “bản sao” (ví dụ,
alloc
,newObject
, hoặcmutableCopy
), hoặc nếu bạn gửi nó làretain
tin nhắn. Bạn chịu trách nhiệm từ bỏ quyền sở hữu đối tượng bạn sở hữu bằng cách sử dụngrelease
hoặcautorelease
. Bất kỳ lúc nào bạn nhận được một đối tượng, bạn không được giải phóng nó.
Với tôi, điều đó có nghĩa là tôi phải phát hành myController
hoặc gửi cho nó một tin nhắn autorelease
. Nhưng, bất cứ khi nào tôi thử làm điều đó ứng dụng của tôi gió lên bị rơi khi tôi đẩy và bật chế độ xem ra khỏi ngăn xếp.
Điều này không có mùi với tôi, nhưng khi chạy các thiết bị, nó tuyên bố rằng tôi không có bất kỳ rò rỉ bộ nhớ nào.
Vì vậy, tôi câu hỏi của tôi là
- Tôi có làm đúng điều này?
- Bộ điều khiển điều hướng có sở hữu MyViewController hay không, giải thích sự thiếu rò rỉ bộ nhớ?
- Tôi có nên gán myController cho một biến mẫu trong ViewController gốc của mình không? Trong trường hợp đó nó sẽ được đánh dấu giữ lại và tôi sẽ phát hành trong phương pháp dealloc của rễ
Tôi đã chỉ tương phản việc sử dụng tự động phát hành với bản phát hành. Bạn có thể autorelease trước hoặc sau, nó không quan trọng, nhưng nếu bạn phát hành, bạn PHẢI làm điều đó sau. –