Có sự khác biệt nào giữa các lần khởi tạo [NSArray new]
và [NSArray array]
không?Sự khác biệt giữa khởi tạo mới và mảng
array
dường như là một phần của việc triển khai NSArray
trong khi new
thuộc về NSObject
.
Có sự khác biệt nào giữa các lần khởi tạo [NSArray new]
và [NSArray array]
không?Sự khác biệt giữa khởi tạo mới và mảng
array
dường như là một phần của việc triển khai NSArray
trong khi new
thuộc về NSObject
.
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.
+new
được thực hiện theo đúng nghĩa đen như:
+ (id) new
{
return [[self alloc] init];
}
và 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]
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
Đi kèm với việc sử dụng cú pháp tôi nghĩ và ưu tiên. – Tander
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