Ưu điểm và nhược điểm của việc sử dụng kiểu quản lý bộ đếm tham chiếu tự động (ARC) mới trong dự án iOS là gì?
Thực hiện chương trình ARC gần giống với MRC viết tốt. Đó là, sự khác biệt về hành vi thường không thể phát hiện được vì cả thứ tự hoạt động và hiệu suất đều rất gần.
Nếu bạn đã biết cách triển khai các ứng dụng OS X hoặc iOS với tính năng tham khảo thủ công (MRC), ARC không thực sự thêm chức năng - nó chỉ cho phép bạn xóa hoạt động đếm tham chiếu khỏi nguồn của mình.
Nếu bạn không muốn học MRC, thì trước tiên bạn có thể muốn thử ARC. Rất nhiều người đấu tranh với, hoặc cố gắng bỏ qua các thực hành phổ biến của MRC (ví dụ: tôi đã giới thiệu một số devjc devs cho máy phân tích tĩnh). Nếu bạn muốn tránh những vấn đề đó, ARC sẽ cho phép bạn trì hoãn sự hiểu biết của mình; bạn không thể viết các chương trình objc nontrivial mà không hiểu sự đếm tham chiếu và thời gian sống và các mối quan hệ đối tượng, cho dù MRC, ARC, hay GC. ARC và GC chỉ cần xóa việc triển khai khỏi các nguồn của bạn và làm điều đúng trong hầu hết các trường hợp. Với ARC và GC, bạn sẽ vẫn cần cung cấp một số hướng dẫn.
Tôi chưa đo điều này, nhưng có thể đáng nói đến việc biên dịch Nguồn ARC sẽ mất nhiều thời gian và tài nguyên hơn.
Nếu chương trình bạn đang phát triển có sử dụng khá lỏng lẻo của tính tham khảo (ví dụ một lượng điển hình của autoreleases), chuyển sang ARC thể thực sự cải thiện thời gian thực hiện của chương trình của bạn và sử dụng bộ nhớ cao điểm.
Bạn có thể chọn không sử dụng ARC khi phát triển với SDK iOS 5.0 không?
Có, sử dụng CLANG_ENABLE_OBJC_ARC. ARC tương thích nhị phân và tất cả những gì thực sự xảy ra là trình biên dịch thực hiện tốt nhất để giới thiệu các hoạt động đếm tham chiếu thích hợp tự động cho bạn, dựa trên các khai báo hiển thị cho bản dịch hiện tại (see my answer here as to why translation visibility is important). Vì vậy, bạn cũng có thể kích hoạt và vô hiệu hóa nó cho một số nguồn trong một dự án và kích hoạt nó cho người khác.
Chế độ hỗn hợp (một số MRC và một số nguồn ARC) tuy nhiên khá phức tạp và tinh tế, đáng chú ý là có thể được sao chép bởi trình biên dịch (ví dụ: nội dung của hàm nội tuyến có thể không chính xác). Vấn đề chế độ hỗn hợp như vậy sẽ rất khó để cô lập. Các chương trình và nguồn ObjC++ sẽ là đặc biệt là về vấn đề này. Hơn nữa, hành vi có thể khác nhau dựa trên cài đặt tối ưu hóa của bạn (như một ví dụ); một chương trình hoạt động hoàn hảo trong bản dựng gỡ lỗi có thể giới thiệu một sự rò rỉ hoặc zombie trong bản phát hành.
Bạn có đề xuất tính toán tham chiếu ARC hoặc thủ công (MRC) cho dự án mới không?
Cá nhân, tôi sẽ gắn bó với MRC một thời gian. Ngay cả khi ARC đã được thử nghiệm trong việc sử dụng thế giới thực, có thể có một số vấn đề còn lại xuất hiện trong các tình huống phức tạp, mà bạn sẽ muốn tránh là người đầu tiên biết và gỡ lỗi. Bộ sưu tập rác của OS X là một ví dụ về lý do tại sao bạn có thể muốn chờ đợi. Như một ví dụ, công tắc có thể thay đổi khi các đối tượng bị phá hủy - các đối tượng của bạn có thể bị phá hủy sớm hơn và không bao giờ được đặt trong các bể tự động. Nó cũng có thể thay đổi thứ tự trong đó ivars được phát hành, có thể có một số tác dụng phụ.
Tôi cũng có một cơ sở mã lớn mà tôi không muốn mất một tuần thử nghiệm tính năng này vào lúc này. Cuối cùng, khả năng tương thích ngược vẫn còn quan trọng đối với tôi.
Ứng dụng sử dụng ARC có thể chạy trên các phiên bản hệ điều hành cũ hơn iOS 5.0 không?
Nếu bạn phát triển với MRC, nó sẽ tương thích ngược. Nếu bạn phát triển với ARC, nó sẽ không nhất thiết phải tương thích. Trong thực tế, nó thậm chí có thể không biên dịch mà không có thêm một chút công việc. Các yêu cầu cho thời gian chạy có sẵn trong một số phiên bản trước đó. See also this question. Nếu bạn cần khả năng tương thích ngược, ARC sẽ không phải là một tùy chọn cho một số phiên bản hệ điều hành.
Cuối cùng, nếu bạn giới hạn lựa chọn thành GC hoặc ARC, tôi khuyên bạn nên sử dụng ARC.
Bạn có một số câu hỏi ở đây, hai câu hỏi được giải quyết trong câu hỏi [Cơ chế tính tham chiếu tự động mới hoạt động như thế nào?] (Http://stackoverflow.com/questions/6385212/how-does-the-new- tự động tham chiếu-đếm-cơ chế-công việc) và [Xcode 4.2 với ARC: mã của tôi có chạy ngay cả trên các thiết bị iOS có phần mềm cũ hơn 5.0 không?] (http://stackoverflow.com/questions/7768861/xcode-4-2 -khi-arc-sẽ-my-code-run-even-on-ios-thiết bị-với-firmware-cũ-tha) –