Tôi đã cố gắng tạo thuộc tính chỉ đọc. Tôi muốn khởi tạo với một giá trị từ lớp tạo ra một thể hiện của lớp này, ví dụ:Khởi tạo thuộc tính chỉ đọc
@property (retain,readonly) NSString *firstName;
Và tôi đã cố gắng để khởi tạo nó như thế này:
-(id)initWithName:(NSString *)n{ self.firstName = n; }
Một khi tôi đã làm điều này, trình biên dịch báo cáo một lỗi mà tài sản chỉ đọc không được chuyển nhượng. Vì vậy, làm thế nào tôi có thể làm điều này?
Vấn đề với việc triển khai ở trên của tôi là giá trị không được giữ lại. Khi tôi thêm phần giữ lại vào thuộc tính, nhiệm vụ này sẽ đặt giá trị vào thuộc tính. Và nếu một số đối tượng khác truy cập thuộc tính này thì giá trị này sẽ ở đó. Tôi cũng đã sửa đổi câu hỏi của tôi – awsome
Tại sao điều này lại là một vấn đề? Sử dụng 'firstname = [n retain]' sẽ chỉ đặt firstName thành con trỏ thành 'n'. Vì vậy, vâng, khi một số đối tượng khác truy cập thuộc tính này, giá trị sẽ ở đó. :) – Rengers
Nếu tôi cố gắng làm theo cách này nếu tôi truy cập thuộc tính này, tôi nhận được ngoại lệ sau.Chương trình nhận được tín hiệu: “EXC_BAD_ACCESS”. Và lỗi này không phải do bất kỳ tài sản nào khác. Tôi đã điều tra điều này rất nhiều trong trình gỡ lỗi. Thuộc tính này hiển thị "ngoài phạm vi". Và nếu tôi chỉ định nó,
self.firstName = n;
. sau đó mọi thứ hoạt động tốt. – awsome