Xcode cho phép bạn (bỏ) kiểm tra cài đặt cho các cảnh báo trình biên dịch cụ thể có thể cảnh báo bạn về một số loại mã không sử dụng. (Chọn dự án trong danh sách nguồn và Tệp> Nhận Thông tin, sau đó chọn tab Xây dựng.) Dưới đây là một số (hiển thị cho Clang và GCC 4.2 đối với tôi) có thể quan tâm:
- Các chức năng không được sử dụng
- Tham số không sử dụng
- Giá trị không được sử dụng
Tôi không thấy bất kỳ tùy chọn nào để phát hiện các lần nhập chưa sử dụng, nhưng điều đó đơn giản hơn một chút - cách tiếp cận công nghệ thấp chỉ là nhận xét các câu lệnh nhập cho đến khi bạn gặp lỗi / cảnh báo biên dịch.
Các phương thức Objective-C không được sử dụng khó phát hiện hơn nhiều so với các hàm C không được sử dụng vì các thông báo được gửi động. Một cảnh báo hoặc một lỗi có thể cho bạn biết rằng bạn có một sự cố tiềm ẩn, nhưng việc thiếu một cảnh báo không đảm bảo rằng bạn sẽ không gặp phải lỗi thời gian chạy.
Chỉnh sửa: Một cách hay khác để phát hiện các phương thức không được sử dụng (có khả năng) là kiểm tra độ bao phủ của mã từ các lần thực thi thực tế. Điều này thường được thực hiện song song với kiểm thử đơn vị tự động, nhưng không nhất thiết phải như vậy.
Bài đăng trên blog này là một giới thiệu tốt về kiểm thử đơn vị và phạm vi mã bằng Xcode. Phần trên gcov
(nhân tiện chỉ hoạt động với mã do GCC tạo ra) giải thích cách lấy Xcode để xây dựng mã công cụ có thể ghi lại tần suất nó đã được thực thi. Nếu bạn sử dụng một bản dựng công cụ của ứng dụng để quay trong trình mô phỏng, sau đó chạy gcov trên đó, bạn có thể xem mã nào đã được thực thi bằng cách sử dụng một công cụ như CoverStory (một GUI khá đơn giản) hoặc lcov
(Perl script để tạo báo cáo HTML) .
Tôi sử dụng gcov
và lcov
cho CHDataStructures.framework và tự động tạo báo cáo phạm vi sau mỗi cam kết SVN. Một lần nữa, hãy nhớ rằng không khôn ngoan nếu coi phạm vi bảo hiểm được thực thi như một thước đo xác định về mã nào là "chết", nhưng nó chắc chắn có thể giúp xác định các phương pháp mà bạn có thể điều tra thêm.
Cuối cùng, vì bạn đang cố gắng xóa mã chết, tôi nghĩ bạn cũng sẽ thấy câu hỏi SO này thú vị:
id
hoặc tạo một bộ chọn để gọi trong thời gian chạy, thì trình phân tích tĩnh không thể đảm bảo rằng mã thực sự không được sử dụng. Nếu mã vẫn cần thiết bị xóa, đó là nơi bạn sẽ gặp lỗi thời gian chạy. Tui bỏ lỡ điều gì vậy?