Câu trả lời ngắn cho câu hỏi của bạn là: "khi chương trình thoát."
Biến tĩnh được cấp phát ngay từ đầu chương trình của bạn, trước khi bắt đầu chức năng main()
. Tương tự, chúng sẽ được phát hành vào cuối chương trình của bạn, ngay sau khi thoát khỏi main()
. Quản lý bộ nhớ này được xử lý bởi thời gian chạy Objective-C, và tất cả xảy ra đằng sau hậu trường.
Nếu bạn đang cố gắng theo dõi hành vi này, có thể bạn sẽ không có nhiều may mắn. Ví dụ, nếu bạn đã làm như sau trong một lớp tùy chỉnh, và sau đó sử dụng lớp đó như là một thành viên tĩnh của lớp khác:
- (void)dealloc
{
NSLog(@"I am being deallocated");
[super dealloc];
}
Bạn sẽ không bao giờ thấy thông báo này xuất hiện trong nhật ký. Có một vài lý do cho việc này. Một, các biến mà NSLog()
yêu cầu có thể đã được deallocated như một phần của thủ tục tắt máy bình thường. Và hai, vì hệ thống thời gian chạy có thể đơn giản giải phóng tất cả bộ nhớ còn lại trong một lần chụp, mà không cần phải gọi phương thức dealloc
.
Điều này có thể có vấn đề nếu lớp tùy chỉnh của bạn thực hiện điều gì đó quan trọng trong phương thức dealloc
của nó. Nếu trường hợp này xảy ra, hãy cân nhắc viết phương thức tùy chỉnh cleanup
mà bạn gọi cho các đối tượng này ngay trước khi thoát khỏi chương trình.
Nguồn
2009-03-19 06:52:31
Chỉ cần bắt gặp câu hỏi này khi học Obj-C. Apple dường như gợi ý rằng không có thứ gì như "biến lớp" và những gì bạn đã định nghĩa trong giao diện là một phương thức * lớp *, khác biệt với biến tĩnh và do đó cần được xác định trong quá trình triển khai. Biến tĩnh được giới hạn trong phạm vi của tệp * triển khai *, không phải chính lớp đó. Có thể đây là một câu hỏi nhỏ nhưng nó làm tôi bối rối: http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/ uid/TP30001163-CH11-TPXREF118 –