2012-09-24 23 views
6

Tôi đang xử lý một codebase nơi các tiêu chuẩn đặt tên thường bị bỏ qua. Vì vậy, có một số phương thức trong một số lớp trả về các đối tượng với số lượng tham chiếu là 1 mặc dù tên phương thức không phù hợp với NARC. Công cụ tuyệt vời.Di chuyển sang Arc với các tiêu chuẩn đặt tên kém

Tôi muốn chuyển đổi các dự án sử dụng tính tham khảo tự động, nhưng tôi là một chút lo lắng do thực tế rằng các tiêu chuẩn đặt tên NARC đã bị bỏ qua hoàn toàn. Có ai biết liệu ARC có dựa vào các tiêu chuẩn đặt tên của NARC để hoạt động đúng không?

Cảm ơn,

Sean

Trả lời

8

ARC không dựa vào quy ước đặt tên để làm việc một cách chính xác. Tuy nhiên ...

Nếu bạn chỉ sử dụng các đối tượng ObjC, thì thông thường nó sẽ "hoạt động" miễn là bạn chỉ có mã ARC. Ví dụ, nếu bạn đã có một phương pháp như:

- (id)something { 
    return [[Something alloc] init]; 
} 

Đây là sai (trong phi ARC code), nhưng ARC sẽ cân bằng nó ra bằng cách thêm hiệu quả thêm một autorelease. Thực tế, ở trên là chính xác mã ARC, vì vậy nó ổn.

Đề nghị của tôi, nếu điều này là hầu như tất cả các mã ObjC, là để tự động chuyển đổi sang ARC và sau đó chạy máy phân tích tĩnh. Vấn đề thực sự có thể nhỏ hơn nhiều so với bạn lo sợ nếu nó khá đơn giản, mã mà chỉ xảy ra có tên xấu.

Nếu đây là mã cầu nối miễn phí của Core Foundation, mọi thứ phức tạp hơn một chút. Sau đó, tôi khuyên bạn nên chạy phân tích tĩnh đầu tiên và nhận được đặt tên của bạn ngay trước khi chuyển đổi. May mắn thay, quy ước đặt tên là một cái gì đó mà máy phân tích tĩnh rất tốt.

+0

Cảm ơn Rob. Tôi sẽ chuyển đổi toàn bộ codebase thành arc (ngoài một số thư viện bên ngoài như Reachability, JSONKit) – seanoshea

3

Tôi đã phải chuyển đổi một số dự án sang ARC và cho đến nay chưa bao giờ gặp phải bất kỳ vấn đề nào trực tiếp do quy ước đặt tên nào.

Trên thực tế việc chuyển đổi thực sự là thẳng về phía trước - như vậy trong khi tôi hoàn toàn hiểu tâm trạng của bạn về mã mà bạn phải đối phó với - Tôi sẽ không thực sự lo lắng quá nhiều.

Cho đến nay tôi chưa bao giờ gặp phải bất kỳ tình huống nghiêm trọng khó khăn trong quá trình chuyển đổi miễn là mã được chuyển đổi là đúng ở nơi đầu tiên và bằng cách nào đó rõ ràng để hiểu.

Trong thực tế sử dụng ARC tôi thấy là như rắc rối miễn phí như bất kỳ ngôn ngữ khác với xây dựng trong GC - liên quan đến các vấn đề bộ nhớ của khóa học!

Trong trường hợp tồi tệ nhất bạn có thể luôn luôn chạy máy phân tích tĩnh - nhưng ngay cả đó là hiếm khi được yêu cầu hiện nay với ARC.

Có lẽ tình huống quan trọng nhất được thảo luận tại đây: What kind of leaks does automatic reference counting in Objective-C not prevent or minimize?

+0

Cảm ơn user387184. – seanoshea

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