Tôi đã thấy các đề xuất nói rằng đặt NSZombieEnabled
thành true
trong khi gỡ lỗi. NSZombie là gì? Nó là một khuôn khổ? Một thiết lập?
Tôi đã thấy các đề xuất nói rằng đặt NSZombieEnabled
thành true
trong khi gỡ lỗi. NSZombie là gì? Nó là một khuôn khổ? Một thiết lập?
Câu trả lời:
Đó là một công cụ hỗ trợ gỡ lỗi bộ nhớ. Cụ thể, khi bạn đặt NSZombieEnabled
thì bất cứ khi nào một đối tượng đạt đến số giữ lại 0, thay vì được định vị, nó sẽ tự biến hình thành một NSZombie
thể hiện. Bất cứ khi nào một thây ma như vậy nhận được một tin nhắn, nó sẽ ghi lại một cảnh báo thay vì bị rơi hoặc hoạt động theo cách không thể đoán trước. Do đó, bạn có thể gỡ lỗi các sự cố tinh vi khi phát hành quá mức / tự động khôi phục mà không cần các công cụ nâng cao hoặc tìm kiếm vất vả.
Cái tên này là một cách chơi khá rõ ràng về thực tế là các vật thể thường được coi là "chết" khi chúng đạt đến số lượng duy trì là 0. Với thiết lập này, chúng tiếp tục tồn tại trong một chu kỳ bán rã kỳ lạ - không sống, cũng không chết. Giống như những thây ma thực sự, ngoại trừ chúng ăn ít não hơn.
Adam đã làm rất tốt khi giải thích Zombies là gì, nhưng sử dụng biến môi trường không phải là cách tốt nhất để tìm và theo dõi chúng.
Một cách tiếp cận tốt hơn nhiều để phát hiện zombie, chỉ là sử dụng Instruments - từ XCode, hãy bắt đầu bằng "Run with Instrument" và chọn "Allocations".
Sau đó dừng ghi ngay sau khi bắt đầu, nhấn nút "i" trên công cụ Phân bổ và bật "bật số lượng tham chiếu" và "Bật phát hiện NSZombie". Bây giờ, hãy nhấn Ghi lại trong công cụ và ứng dụng của bạn sẽ khởi động - nếu có bất kỳ đối tượng zombie nào được gửi đi, quá trình ghi âm sẽ dừng lại và một hộp thoại sẽ bật lên trong dòng thời gian ghi - bạn có thể nhấp vào đó để tìm mọi vị trí mà đối tượng đã ở. giữ lại hoặc phát hành.
Chỉnh sửa: Lời khuyên trước đây dành cho XCode 3, đây là phần bổ sung cho XCode 4:
Trong XCode 4.2 , có một cơ chế thậm chí còn dễ dàng hơn để sử dụng phát hiện Zombie - Công cụ Zombie. Thay vì "Chạy" để khởi động ứng dụng, hãy sử dụng "Hồ sơ" và một bộ chọn công cụ sẽ xuất hiện. Chọn "Zombie", và ứng dụng sẽ bắt đầu chạy - làm bất cứ điều gì gây ra sự cố của bạn, một hộp thoại sẽ bật lên với nội dung "Zombie Messaged".
Từ đó, nhấp vào mũi tên nhỏ trong hộp thoại. Điều đó sẽ đưa đến danh sách tất cả các lần đối tượng zombie đó được tạo, giữ lại hoặc phát hành. Kéo thanh bên lên và bạn có thể đi tới từng mục nhập, nhìn vào dấu vết ngăn xếp để tìm mã chịu trách nhiệm cho mỗi lần điều chỉnh trong số lượng giữ lại.
Tôi đồng ý với những gì Kendall đã thêm, nó rất hữu ích, nhưng tôi khuyên bạn vẫn nên thực hiện biến môi trường để bạn không quên chúng đã được kích hoạt. Tương tự như liên kết (hiện đã hết hạn) tại Cocoa Dev, tôi đặt cái này để không bỏ lỡ:
if(getenv("NSZombieEnabled") || getenv("NSAutoreleaseFreedObjectCheckEnabled")) {
NSLog(@"ZOMBIES/AFOC ARE ENABLED!!! AAAAARRRRRRGH!!! BRAINS!!!");
}
Nó thu hút sự chú ý của tôi rất độc đáo.
Sẽ giúp ai đó.
Tài liệu chi tiết về Instruments. https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InticmentsUserGuide/index.html#//apple_ref/doc/uid/TP40004652-CH3-SW1