Video: TouchPad Trên Windowns 10 Có Gì Mới 2025
Bạn có thể muốn sử dụng ARC cho ứng dụng iOS của bạn. Tính đếm tham chiếu tự động (ARC) là một tính năng trình biên dịch đơn giản hóa quá trình quản lý thời gian sống của các đối tượng Mục tiêu-C. Thay vì bạn phải nhớ khi nào để giữ lại hoặc giải phóng một đối tượng, ARC đánh giá các yêu cầu đời sống của các đối tượng của bạn và tự động tổng hợp các phương thức gọi thích hợp trong thời gian biên dịch.
Nó không phải là mô hình bộ nhớ thời gian chạy mới - và nó không phải là bộ thu gom rác. Tất cả các hành động diễn ra trong trình biên dịch. ARC quan tâm đến quá trình giữ lại và giải phóng các đối tượng bằng cách tận dụng lợi thế của (và có các quy ước đặt tên). Nó cũng dựa vào vòng loại quyền sở hữu con trỏ đối tượng mới.
Bạn lo lắng, ARC thực sự nhanh hơn nhiều (có hiệu suất tốt hơn) hơn là quản lý bộ nhớ một mình.
ARC không tự động hoá các hàm malloc () và free () (các hàm C) và không tự động (CF) hoặc (CG).
Để có thể quản lý bộ nhớ cho bạn, ARC áp đặt một số hạn chế - chủ yếu thực thi một số phương pháp hay nhất và không cho phép thực hiện một số thực tiễn khác. Bạn sẽ không phải lo lắng về hầu hết những điều này trong một ứng dụng đã được tạo để sử dụng ARC.
Dưới đây là các quy tắc mà bạn phải làm theo để sử dụng ARC trong ứng dụng của bạn.
-
Quy tắc 1: Không gọi phương thức giữ lại , phát hành hoặc autorelease . Ngoài ra, bạn không thể thực hiện tùy chỉnh hoặc phương pháp.
Nếu bạn là người mới sử dụng chương trình Mục tiêu-C, quy tắc này sẽ không có ý nghĩa gì đối với bạn vì đây không phải là điều bạn sẽ làm trong các ứng dụng hiện tại của bạn. Lý do duy nhất bạn cần biết về quy tắc này là hiểu mã ARC không đang làm gì để quản lý bộ nhớ. Nếu bạn là một tay cũ, bạn đã sử dụng những phương pháp này, và bạn sẽ rất vui khi được cho biết chứ không phải để sử dụng chúng.
Bạn có thể cung cấp việc triển khai tùy chỉnh dealloc nếu bạn cần quản lý các tài nguyên khác.
-
Quy tắc 2: Không lưu trữ các con trỏ đối tượng trong cấu trúc C. Bởi vì trình biên dịch phải biết khi tài liệu tham khảo đến và đi, bạn không thể lưu các con trỏ đối tượng trong cấu trúc. Đối với hầu hết độc giả, đó sẽ không phải là một vấn đề bởi vì bạn sẽ sử dụng các đối tượng thay vì cấu trúc C.
-
Quy tắc 3: Thông báo trình biên dịch về quyền sở hữu khi sử dụng các đối tượng Core Foundation. Trong ứng dụng iOS, bạn thường sử dụng khung CoreFoundation.
Các đối tượng CoreFoundation là bất cứ điều gì bắt đầu với một CF-như các chức năng của sổ địa chỉ.Một đối tượng CoreFoundation sẽ như sau:
AudioServicesCreateSystemSoundID ((__bridge CFURLRef) burnRubberURL, burnRubberSoundID);
ARC không tự động quản lý thời gian sống của các loại CoreFoundation và có các quy tắc quản lý bộ nhớ CoreFoundation và các chức năng bạn có thể sử dụng, chẳng hạn như CFRetain và CFRelease (hoặc các biến thể cụ thể tương ứng với từng loại).
Hầu hết thời gian, bạn không phải lo lắng về quản lý bộ nhớ bởi vì bạn thường sẽ được ném một Objective-C đối tượng đến một đối tượng kiểu CoreFoundation, hoặc ngược lại - kết quả là bạn kết thúc không có bộ nhớ CoreFoundation quản lý trong mã của bạn. Bạn vẫn phải để cho trình biên dịch biết về bất kỳ sự liên quan đến quản lý bộ nhớ, mặc dù.
Bạn chỉ đơn giản nói với ARC không phải lo lắng bằng cách sử dụng một cast _bridge.
Nếu bạn có quản lý bộ nhớ CoreFoundation, các macro như CFBridgingRetain hoặc CFBridgingRelease sẽ chuyển quyền sở hữu giữa ARC và CoreFoundation.
-
Quy tắc 4: Sử dụng từ khóa @autoreleasepool để đánh dấu sự bắt đầu của một khối autorelease. Đây không phải là điều bạn sẽ quan tâm - hoặc sẽ bao giờ làm, cho vấn đề đó. Nhưng đó vẫn là một quy luật.
-
Quy tắc 5: Thực hiện theo các quy ước đặt tên. Trình biên dịch biết có nên giữ lại một đối tượng dựa trên những gì được trả về. Đôi khi đối tượng được trả lại bằng một phương pháp được giữ lại, và đôi khi nó được tự động trả sau. Nếu đối tượng sẽ được tự động, đối tượng cần phải được giữ lại. Nếu nó đã được giữ lại, bạn không muốn trình biên dịch để làm bất cứ điều gì.
Cách duy nhất trình biên dịch biết liệu một đối tượng đã được giữ lại khi nó được trả lại là thông qua các quy ước đặt tên nhất định. Trong ARC, các quy ước đặt tên này bây giờ là một phần của ngôn ngữ và bạn phải tuân theo chúng.
Trình biên dịch biết rằng một đối tượng được lưu lại đã được trả lại khi từ đầu tiên trong phần đầu tiên của selector (tên phương thức) được phân bổ, mới, sao chép, muteable bản sao, hoặc init. Các phương thức này chuyển quyền sở hữu - nơi chuyển quyền sở hữu có nghĩa là đối tượng đã được giữ lại cho bạn. Một ví dụ là phương thức initWithFormat: NSString. (Nhớ rằng "quyền sở hữu" không phải là quyền sở hữu độc quyền: Một vài đối tượng có thể đồng thời sở hữu một đối tượng duy nhất.)
Ngoài ra, bạn không thể cho một tài sản bắt đầu với tên tài sản.
-
Quy tắc 6: Chỉ cần làm theo các quy tắc. Đó là nó - không giữ lại việc phát hành hoặc tự động bỏ qua. Chỉ cần làm theo các quy tắc và mã vào nội dung của trái tim của bạn mà không phải lo lắng về quản lý bộ nhớ.
Dĩ nhiên, ngoại trừ trong một số trường hợp, bạn cần phải nói rõ cho trình biên dịch biết bạn muốn làm gì. Trong những trường hợp này, bạn sẽ phải nói rõ ràng với trình biên dịch về thời gian sống của một đối tượng.
