Có an toàn khi sử dụng các lớp được định nghĩa trong dự án của bạn trong phạm vi __attribute __ ((constructor))? Thời gian chạy C mục tiêu có một cơ hội để làm những gì nó cần phải làm gì với các lớp học của bạn khi các hàm __attribute __ ((constructor)) được gọi là? Hoặc tôi hiểu lầm cách thời gian chạy tải các lớp học và không có sự khác biệt giữa các lớp thư viện và của riêng bạn trong bối cảnh này?các lớp chức năng __attribute __ ((constructor) an toàn
Trả lời
Tôi sẽ đề nghị bạn sử dụng + initialize
hoặc + load
thay vì thuộc tính, nhưng đó là sở thích của tôi.
Phương thức + load
của lớp được gọi khi lớp được tải bởi thời gian chạy.
Phương thức + initialize
của một lớp được gọi trước bất kỳ phương thức nào khác trong lớp.
Từ các tài liệu cho load
:
Trên Mac OS X v10.5, thứ tự khởi tạo như sau:
- Tất cả initializers trong bất kỳ khuôn khổ bạn liên kết đến.
- Tất cả các phương pháp tải trong hình ảnh của bạn.
- Tất cả bộ khởi tạo tĩnh C++ và C/C++ thuộc tính (hàm tạo) hoạt động trong hình ảnh của bạn.
- Tất cả trình khởi tạo trong các khung liên kết đến bạn.
Ngoài ra:
- phương pháp + tải của một lớp được gọi sau khi tất cả các phương pháp + tải superclasses của nó.
- Phương thức tải + danh mục được gọi sau phương thức tải + riêng của lớp học.
Trong phương thức + tải, bạn có thể an toàn gửi các lớp không có liên quan khác từ cùng một hình ảnh, nhưng bất kỳ phương thức + tải nào trên các lớp đó có thể chưa chạy.
Điều này làm cho rõ ràng mọi phương thức được phân bổ hoặc + load
sẽ chạy sau khi thời gian chạy được khởi tạo. Và như + load
là một phương thức trên lớp của bạn và được chạy trước bất kỳ phương thức được phân bổ nào sau đó trước khi thời gian chạy phải thiết lập lớp của bạn.
+1 tìm kiếm tốt, CRD! – justin
Đó không phải là chức năng, chúng chỉ là ký hiệu thuộc tính trình biên dịch. Họ sẽ không thay đổi mã được tạo ra.
nó được sử dụng để nói "gọi chức năng này khi hình ảnh được tải", và nó được hỗ trợ. câu hỏi liên quan đến thứ tự khởi tạo. nghĩ về nó theo cách này: * Tôi có một khuôn khổ trong đó có một chức năng init và một số lớp học objc. tôi có thể sử dụng một cách an toàn các loại objc được xuất bởi khung công tác trong hàm xây dựng của khung công tác không? chúng sẽ được tải vào thời gian chạy theo điểm đó không? * – justin
- 1. strtok chức năng an toàn chủ đề
- 2. Chức năng so sánh chuỗi an toàn
- 3. Có an toàn để sử dụng các chức năng chủ đề 'Không an toàn' không?
- 4. Các chức năng thành viên tĩnh và an toàn luồng
- 5. PHP - Chức năng "bao gồm" có an toàn không?
- 6. Chức năng thời gian của thread an toàn MSVC?
- 7. Chức năng thành viên tĩnh và an toàn luồng
- 8. Chức năng Php PDO an toàn như thế nào: lastInsertId?
- 9. Chức năng fopen() có an toàn trong Linux không?
- 10. Các biến toàn cục chức năng Python?
- 11. Chức năng trợ giúp để chuyển đổi an toàn từ các chuỗi
- 12. Làm thế nào để sử dụng một cách an toàn các chức năng Linux mới?
- 13. Biến toàn cục Python và chức năng lớp học
- 14. Chức năng jquery toàn cầu
- 15. An toàn loại an toàn()
- 16. Các lớp singleton có an toàn trong IIS không?
- 17. An toàn chủ đề trong lớp Java
- 18. Trộn các kênh an toàn & không an toàn
- 19. Chức năng toàn cầu CodeIgniter
- 20. Sự khác nhau giữa đề an toàn và an toàn
- 21. C++ và HOÀN TOÀN chức năng động
- 22. Cách chức năng để thực hiện một bộ chia sẻ an toàn chủ đề
- 23. Có LoadLibrary, FreeLibrary và GetModuleHandle Win32 chức năng chủ đề an toàn không?
- 24. Template lớp constructor
- 25. Chủ đề chức năng đọc và ghi ổ cắm có an toàn không?
- 26. Chủ đề chức năng gettimeofday có an toàn trong Linux không?
- 27. Người dùng phải cung cấp chức năng chấm dứt() có an toàn không?
- 28. Constructor hoặc init chức năng cho một đối tượng
- 29. Mã an toàn và không an toàn
- 30. Rails - Chức năng toàn cầu phổ quát
Bạn đã thử những gì? Tài liệu GCC cho biết thuộc tính này hiện không được hỗ trợ cho Objective-C (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html), và tài liệu Clang dường như im lặng về vấn đề này. – CRD
@CRD Trình xây dựng hình ảnh hoạt động như mong đợi bằng cả hai trình biên dịch được phân phối bằng Xcode. – justin
@Justin - rất nhiều tài liệu ;-) Âm thanh như bạn nên đăng bình luận của bạn như là câu trả lời. Nathan, tại sao bạn muốn sử dụng thuộc tính này chứ không phải là '+ initialize', được chạy trước khi sử dụng bất kỳ lớp nào? – CRD