2015-10-23 11 views
7

Dường như có các phương pháp khác nhau để tạo các NSArrays (giống với NSDictionary và một số thứ khác).Sự khác biệt giữa NSArray.array/.new/@ []/alloc-init

tôi biết:

  1. [NSArray array]
  2. [NSArray new]
  3. @[]
  4. [[NSArray alloc] init]

Vì lý do dễ đọc tôi thường gắn bó với [NSArray array], nhưng sự khác biệt giữa tất cả những người là gì, họ có thực sự làm y hệt?

+0

So sánh http://stackoverflow.com/questions/5423211/difference-between-nsmutablearray-array-vs-nsmutablearray-alloc-init, http://stackoverflow.com/questions/14527489/using-array-of- items-vs-nsarray-arraywithobjects và http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new. –

+0

Và câu hỏi liên quan đến [swift] chính xác đến mức nào? –

Trả lời

11

Kết quả là giống nhau cho tất cả chúng, bạn sẽ nhận được một mảng không thay đổi mới trống. Tuy nhiên, các phương pháp khác nhau có những hàm ý quản lý bộ nhớ khác nhau. Sử dụng ARC điều này không có sự khác biệt nào về kết thúc, nhưng trước ARC, bạn sẽ phải sử dụng đúng phiên bản hoặc gửi thông tin giữ chân, giải phóng hoặc tự động phát lại thích hợp.

[NSArray new][[NSArray alloc] init] trả lại mảng có số lần giữ lại +1. Trước ARC, bạn sẽ phải giải phóng hoặc tự động phát hiện mảng đó hoặc bạn sẽ bị rò rỉ bộ nhớ.

[NSArray array]@[] trả về một mảng đã được tự động phát hiện (giữ lại số 0). Nếu bạn muốn nó dính xung quanh mà không có ARC, bạn sẽ phải tự giữ lại nó hoặc nó sẽ được deallocated khi hồ bơi autorelease hiện tại được popped.

7
  1. [NSArray array]: Tạo và trả về một mảng trống

  2. [NSArray new]: alloc, init và trả về một đối tượng NSArray

  3. @[]: Tương tự như 1.

  4. [[NSArray alloc] init]: Tương tự như 2.

khác nhau giữa [NSArray array][[NSArray alloc] init] là nếu có đều là phòng không ARC:

  • [NSArray array] là một đối tượng autorelease. Bạn phải gọi retain nếu bạn muốn giữ nó. Ví dụ: khi bạn return một mảng.

  • [[NSArray alloc] init] là đối tượng được giữ lại. Vì vậy, bạn không cần phải gọi thêm retain nữa nếu bạn muốn giữ nó.

Với ARC, chúng giống nhau.

+0

nó sẽ có ý nghĩa hơn nếu bạn cũng có thể giải thích khi chúng ta nên nhận thức được sự khác biệt giữa '[mảng NSArray];' và '[[NSArray alloc] init];' ví dụ và tại sao. – holex

+0

@holex. Cảm ơn bạn. Tôi đã cải thiện câu trả lời của mình. – anhtu

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