2010-07-26 34 views

Trả lời

3

Trong số 4 phương pháp bạn đã đề cập, bạn thường sẽ chỉ sử dụng releaseautorelease trong mục tiêu-c. free có thể được sử dụng khi bạn đã sử dụng c và malloc nếu không bạn nên sử dụng releaseautorelease.

dealloc không được gọi bằng bất kỳ mã nào của bạn vì nó có thể ảnh hưởng đến chu kỳ lưu giữ/giải phóng mà mục tiêu-c sử dụng để theo dõi tài nguyên. Sử dụng dealloc gần như chắc chắn sẽ dẫn đến sự cố trong thời gian chạy nếu bạn đã từng sử dụng nó.

Nguồn cuối cùng của việc sử dụng các releaseautoreleaseApple memory management documentation

3
  • free là đối diện của malloc và được sử dụng trong C. Bạn có thể sẽ không sử dụng nó rất nhiều lập trình Objective C
  • Nếu bạn sở hữu một đối tượng, bạn release khi bạn hoàn thành nó
  • Bạn cũng có thể autorelease một đối tượng. Thao tác này sẽ tự động giải phóng nó ở cuối vòng lặp chạy vòng lặp hiện tại
  • Khi số tham chiếu trên đối tượng giảm xuống 0, thời gian chạy cuộc gọi dealloc. Bạn không nên gọi phương pháp này mình

bạn "sở hữu" một đối tượng nếu bạn alloc, new, retain hoặc copy nó.

Apple cung cấp some good documentation về điều này.

+1

Điểm 3: Tôi muốn gọi nó là "lặp vòng lặp" thay vì "chạy vòng lặp". Điểm 4: Chắc chắn, bạn muốn nói "dealloc" thay vì "phát hành", phải không? (xin lỗi, nitpicking) – Dirk

+0

Cảm ơn rất nhiều. Điều đó chắc chắn hữu ích. – ar106

+0

@Dirk Tốt tại chỗ. Đã sửa. –

17

free() là hàm C mà bạn sử dụng để vứt bỏ bộ nhớ không còn cần thiết mà bạn thu được thông qua malloc() hoặc chức năng khác được yêu cầu miễn phí() để giải quyết bộ nhớ của nó, ví dụ: strdup().

-dealloc là bộ chọn Mục tiêu-C được gửi bởi thời gian chạy Objective-C đến đối tượng khi đối tượng không còn thuộc sở hữu của bất kỳ phần nào của ứng dụng.

-release là bộ chọn bạn gửi tới một đối tượng để cho biết rằng bạn đang từ bỏ quyền sở hữu đối tượng đó. Khi một đối tượng không thuộc sở hữu của bất kỳ ai, nó được gửi thông báo -dealloc theo thời gian chạy.

-autorelease là bộ chọn bạn gửi tới một đối tượng để cho biết bạn đang từ bỏ quyền sở hữu đối tượng. Tuy nhiên nếu không ai sở hữu đối tượng, thì -dealloc cuối cùng sẽ được hoãn lại cho đến khi một số điểm không xác định sau này. Trong thực tế, những gì bạn đang thực sự làm là chuyển quyền sở hữu của bạn sang một nhóm tự động phát hành sau đó sẽ phát hành nó khi bản thân nó được phát hành (hoặc thoát ra).

Bạn không được gửi -dealloc cho một đối tượng ngoại trừ super trong phương thức riêng của phương pháp -dealloc của đối tượng.

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