2013-08-05 25 views
15

Tôi đang cố gắng hiểu cách quản lý bộ nhớ hoạt động khi sử dụng xamarin.ios và chạy ứng dụng trên thiết bị iOS thực tế. Sự hiểu biết của tôi rằng nền tảng iOS không có bộ thu gom rác, nhưng nền tảng sử dụng ARC (tính toán tham chiếu tự động).Quản lý bộ nhớ hoạt động như thế nào trên Xamarin.IOS

Có đúng là ứng dụng đã biên dịch sẽ sử dụng ARC thay vì thu thập rác?

+0

Bài thuyết trình hay về chủ đề: "Quản lý bộ nhớ nâng cao trên iOS và Android - Phát triển năm 2013" http://xamarin.com/evolve/2013#session-0w86u7bco2 –

Trả lời

25

ARC là một công nghệ áp dụng cho mã nguồn được biên soạn bởi trình biên dịch Objective-C và nó có tác dụng chuyển tất cả các nhiệm vụ như thế này:

foo = bar 

đâu "foo" và "thanh" là NSObjects vào đoạn mã sau:

if (foo != null) 
    [foo release]; 
if (bar != null) 
    [bar retain] 
foo = bar; 

Như bạn thấy, nó chỉ là một trình biên dịch lừa t hat viết lại mã của bạn để bạn không quên giữ lại/giải phóng mọi thứ và chỉ áp dụng cho Objective-C.

Các thư viện mục tiêu-C sử dụng (ARC hoặc ARC) không thực sự quan trọng đối với MonoTouch, miễn là chúng sử dụng giao thức đã được ghi lại tài liệu hiện tại khi nào cần giữ lại và khi nào phát hành. MonoTouch chỉ tuân theo các quy tắc đó.

Đối tượng C# không có đường dẫn mã lưu giữ/giải phóng và thay vào đó, chỉ sử dụng GC để xác định đối tượng nào còn hoạt động.

Khi đối tượng mục tiêu-C được hiển thị trên thế giới C#, Monotouch lấy một tham chiếu (gọi là giữ lại). Khi MonoTouch GC xác định rằng một đối tượng không còn có thể truy cập được bởi bất kỳ mã được quản lý nào, thì GC gọi các bản phát hành trên đối tượng.

+1

Câu trả lời thú vị. – Blounty

+1

** Khi đối tượng Objective-C được hiển thị trên thế giới C#, Monotouch lấy một tham chiếu (nó gọi là giữ lại). Khi MonoTouch GC xác định rằng một đối tượng không còn có thể truy cập được bởi bất kỳ mã được quản lý nào, thì GC sẽ giải phóng đối tượng. ** Tôi nhầm lẫn với điều này .. Trong Xamarin.ios chúng tôi chỉ sử dụng C# no Objective C ... bạn có nghĩa là để nói cho tất cả mọi thứ chúng tôi tạo ra trong C# monotouch tạo ra một điều tương đương bằng cách sử dụng Objective C ... nếu bạn có thể làm sáng tỏ điều này, nó sẽ là tốt –

6

Có một Tổng kết tuyệt vời trong các tài liệu Xamarin Here

+1

Cảm ơn bạn đã liên kết. Nó rất hữu ích. – gyurisc

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