2012-06-29 38 views
63

thể trùng lặp:
alloc, init, and new in Objective-CSự khác nhau giữa [Class new] và [[Class alloc] init trong iOS là gì?

Tôi là một chút nhầm lẫn về [Class new][[Class alloc] init]. Tôi đã xác định một đối tượng content sử dụng [Class new][[Class alloc] init].

(1). NSMutableArray *content = [NSMutableArray new]; 
(2). NSMutableArray *content = [[NSMutableArray alloc] init]; 

Câu hỏi của tôi là về sự khác biệt giữa [Class new][[Class alloc] init]. Đối với tôi, (1) và (2) là tương tự. Nếu (1) và (2) giống nhau, thì tại sao chúng ta sử dụng [[Class alloc] init] hầu hết thời gian, so với [Class new]? Tôi nghĩ rằng phải có một số khác biệt.

Vui lòng giải thích sự khác biệt, ưu điểm & điểm yếu của cả hai?

+1

bạn có thể tham khảo link này http://macresearch.org/difference -between-alloc-init-and-new – janusbalatbat

Trả lời

123

Alloc: Phương pháp lớp của NSObject. Trả về một cá thể mới của lớp nhận.

Init: Phương pháp thể hiện của NSObject. Thực hiện bởi các lớp con để khởi tạo một đối tượng mới (bộ thu) ngay sau khi bộ nhớ cho nó đã được cấp phát.

Mới: Phương pháp lớp NSObject. Phân bổ một thể hiện mới của lớp nhận, gửi cho nó một thông báo init và trả về đối tượng khởi tạo.

Phát hành: Phương pháp thể hiện của đại biểu NSObject. Giảm số lượng tham chiếu của người nhận.

Tự động trả lời: Phương pháp thể hiện của đại biểu NSObject. Thêm người nhận vào nhóm tự động phát hiện hành.

Lưu giữ: Phương pháp thể hiện của đại biểu NSObject. Tăng số lượng tham chiếu của người nhận.

Sao chép: Phương pháp thể hiện của đại biểu NSObject. Trả về phiên bản mới của bản sao của người nhận.

Vì vậy, để kết luận chúng ta có thể nói rằng

alloc đi với init

mới = alloc + init

+1

Tuyệt vời! Điều đó rất hữu ích! –

+0

Các đại biểu không thực sự có bất cứ điều gì để làm với điều này. Bạn có nghĩa là giao thức 'NSObject' ** **? – dreamlax

9

Ở đây: alloc, init, and new in Objective-C

Về cơ bản, đó là câu hỏi hiện đại so với truyền thống. Lợi thế trực tiếp nhất của init trên mới là có nhiều phương thức init tùy chỉnh.

26

Phương thức +new chỉ đơn giản là viết tắt cho +alloc-init. Các ngữ nghĩa quyền sở hữu là giống hệt nhau. Lợi ích duy nhất để sử dụng +new là nó ngắn gọn hơn. Nếu bạn cần cung cấp các đối số cho trình khởi tạo của lớp, bạn sẽ phải sử dụng các phương thức +alloc-initWith... thay thế.