2015-07-16 26 views

Trả lời

7

mới = alloc + init

Phương pháp này là sự kết hợp của alloc và init. Giống như phân bổ, nó khởi tạo biến thể isa của đối tượng mới để nó trỏ đến cấu trúc dữ liệu lớp. Sau đó nó gọi phương thức init để hoàn thành quá trình khởi tạo.

NSObject Class Reference

+new được thực hiện theo đúng nghĩa đen như:

+ (id) new 
{ 
    return [[self alloc] init]; 
} 

new không hỗ trợ initializers tùy chỉnh (như initWithObjects), do đó alloc + init là hơn rõ ràng hơn new

Vì vậy, câu hỏi bây giờ là về:

[NSArray mảng] vs [[NSArray alloc] init]

Sự khác biệt chính giữa này là nếu bạn không sử dụng ARC (Automatic Đếm tham khảo). Mục đầu tiên trả về đối tượng được tự động khôi phục và . Cái thứ hai trả về một đối tượng chỉ còn lại . Vì vậy, trong trường hợp đầu tiên, bạn sẽ muốn giữ lại nó nếu bạn muốn giữ nó xung quanh lâu hơn vòng lặp chạy hiện tại. Trong trường hợp thứ hai , bạn sẽ muốn phát hành hoặc tự động phát hành nếu bạn không muốn giữ nó xung quanh.

Bây giờ chúng ta có ARC, điều này thay đổi mọi thứ. Về cơ bản, trong mã ARC, nó không quan trọng bạn sử dụng cái nào trong số này.

Nhưng hãy nhớ rằng [NSArray array] trả về một mảng bất biến rỗng, vì vậy sử dụng array với NSMutableArray làm cho ý nghĩa hơn

Để biết thêm thông tin:

alloc, init, and new in Objective-C

Use of alloc init instead of new

Difference between [NSMutableArray array] vs [[NSMutableArray alloc] init]

+0

Thêm tối đa câu trả lời này, liên quan đến [mảng NSArray], nó tạo ra một mảng không thay đổi rỗng. Nó khá vô dụng để làm điều này rõ ràng (như sử dụng mới), nhưng nó thay đổi khi sử dụng một NSMutableArray. Vấn đề là, như @Aladin đã đề cập, bây giờ chúng ta có ARC, Nó không tạo ra bất kỳ sự khác biệt nào. – Erakk

+0

Đi kèm với việc sử dụng cú pháp tôi nghĩ và ưu tiên. – Tander

+0

Nó không phải là hoàn toàn vô ích, bạn có thể làm một cái gì đó như 'NSArray * arr = [mảng NSArray]; NSArray * arr2 = [arr arrayByAddingObject: @ "ha!"]; '. Nó có thể hữu ích .. tại một số điểm .. tôi đoán – Daniel

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