8

Tôi có một ứng dụng có cả mã ARC lẫn mã không phải ARC. Trình biên dịch sẽ bắt khi tôi cố gắng biên dịch mã không phải ARC như ARC. Làm cách nào để tạo ra lỗi/thông báo thời gian biên dịch khi mã ARC của tôi bị biên dịch sai mà không có ARC? Rõ ràng, mã sẽ biên dịch. Nó sẽ bị rò rỉ. Máy phân tích tĩnh sẽ bắt được vấn đề. Tôi thà tìm cách để lại một pragma hoặc xác định trong mã ARC của tôi.Làm thế nào để yêu cầu ARC trong một lớp học?

Sau đây là định nghĩa của Apple trong objc-api.h:

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ 
#if !defined(OBJC_ARC_UNAVAILABLE) 
# if __has_feature(objc_arr) 
#  define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 
# else 
#  define OBJC_ARC_UNAVAILABLE 
# endif 
#endif 

My C-vĩ mô-fu còn yếu. Tôi sẽ sử dụng nó như thế nào? Hoặc, có lẽ có một biểu tượng tốt hơn để kiểm tra?

P.S. Tôi hỏi vì tôi xây dựng phần lớn ứng dụng của mình từ các thư viện có thể sử dụng lại. Tôi muốn đảm bảo rằng mỗi tệp được biên dịch theo đúng cách.

Trả lời

9

Sau đây nên làm việc:

#if !__has_feature(objc_arc) 
# error Compile me with ARC, please! 
#endif 

Nơi nó ở phía trên cùng của tập tin của bạn.

+0

Cảm ơn bạn về macro. – adonoho

-1

Nếu đó là tệp hoàn chỉnh, tôi khuyên bạn nên thêm -fno-objc-arc vào cờ trình biên dịch để sử dụng trình biên dịch không phải vòng cung.

Sử dụng macro để biên dịch "các phần" của mã với trình biên dịch không phải vòng cung. Ví dụ: , sử dụng điều này nếu bạn đang viết một khuôn khổ sẽ được sử dụng trong cả hai cơ sở mã arc và không arc và viết bản phát hành, deallocs trong khối macro này

+0

Mugunth, như Xcode hiện đại, v4.2 +, cho phép mã ARC và không phải ARC hỗn hợp trong một dự án và ARC hỗ trợ các ứng dụng quay lại iOS v4.0, tôi thích tránh các tuyến macro và chỉ di chuyển tệp qua ARC Tôi thêm chức năng mới. Điều quan trọng là đảm bảo thay đổi này được truyền bá khi các phiên bản mới của ứng dụng của tôi và ứng dụng khách của tôi được sửa đổi. Macro trên thực hiện điều này. Cảm ơn bạn đã bình luận, suy nghĩ và thời gian của bạn. Andrew – adonoho

Các vấn đề liên quan