Tôi đã có một vấn đề trong dự án của tôi, nơi tôi công bố trong tiêu đề nộp tài sản NSMutableDictionary như vậy:iOS, NSMutableDictionary
@property (copy, nonatomic) NSMutableDictionary *DataDict ;
Bây giờ trong file thực hiện, tôi đi trước và khởi từ điển này vì I am gonna sử dụng nó, như vậy:
DataDict = [[NSMutableDictionary alloc]init];
Bây giờ khi tôi đã làm điều này, vào phút tôi cố gắng thêm một cái gì đó vào từ điển này, tôi sẽ nhận được thông báo lỗi này:
- [__ NSDictionaryI setObject: forKey:]: chọn không được công nhận gửi đến dụ 0x885ae60 2012/10/19 16: 51: 56,040 thử nghiệm [2297: C07] * Chấm dứt ứng dụng do ngoại lệ uncaught 'NSInvalidArgumentException', lý do: '- [__ NSDictionaryI setObject: forKey:]: chọn không được công nhận gửi đến dụ 0x885ae60'
Sau một thời gian và chạy qua dự án của tôi một ngàn lần, tôi quyết định bỏ ghi chú dòng khởi tạo của tôi, như vậy
//DataDict = [[NSMutableDictionary alloc]init];
và điều đó đã khắc phục được sự cố.
Câu hỏi của tôi là: Tại sao?
Xin cảm ơn, tôi phải đọc những nội dung đó. – Kalamantina
Điều đó có nghĩa là tôi nên làm cho tham chiếu mạnh mẽ, và sau đó phân bổ init? hoặc làm cho nó mạnh mẽ và không cần phải phân bổ init? – Kalamantina
Bằng cách làm cho nó 'mạnh mẽ' bạn chỉ nói rằng bạn muốn giữ một mối quan hệ mạnh mẽ (sở hữu) với đối tượng đó (mà về cơ bản có nghĩa là bạn muốn nó được deallocated khi chủ sở hữu deallocates). Bạn vẫn phải phân bổ/init đối tượng như mọi khi. – Alladinian