Bạn chưa thực sự định nghĩa một biến, bạn chỉ định một tài sản (mà ngầm định nghĩa một biến đó là tư nhân). Và vì thuộc tính chỉ là phương thức, bạn cần cú pháp dấu chấm. Lưu ý rằng self.property
giống với [self property]
.
Để khắc phục điều này, hãy chỉ định biến. Tôi sẽ cung cấp cho bạn một ví dụ trong đó biến có tên khác với thuộc tính. Hầu hết mọi người đã chọn cùng một tên cho cả hai nhưng tôi muốn có chúng khác nhau vì vậy tôi ngay lập tức nhìn thấy cái nào là có nghĩa là.
// a.h
@interface MyClass : NSObject {
// Instance variables are "protected" by default, except if you
// use @private or @public.
Object *myObjectVar;
}
@property (nonatomic, retain) Object *myObject;
@end
// a.m
@implementation MyClass
@synthesize myObject = myObjectVar;
@end
// b.h
@interface AnotherClass : MyClass
@end
// b.m
@implementation AnotherClass
- (void) someMethod {
// works
Object *obj = myObjectVar;
// works
obj = self.myObject;
// the same as self.myObject
obj = [self myObject];
}
@end
Lưu ý sự khác biệt khi bạn gán: nếu bạn gán cho biến của bạn đối tượng không được giữ lại tự động. Nhưng nó được giữ lại nếu bạn sử dụng tài sản:
myObjectVar = someObject; // not retained, old object not released!
self.myObject = someObject; // old object released, new object retained
[self setMyObject:someObject]; // same as the line above
Edit: đề cập rằng các biến Ví dụ tổng hợp là tin theo mặc định, như ghi nhận của @ Jason Coco. Và @NSGod đúng là các biến mẫu bình thường là được bảo vệ theo mặc định chứ không phải công khai, đã khắc phục điều đó.
Điều này được giải thích bằng [câu trả lời của Kevin Ballard] (http://stackoverflow.com/a/8511046/) tới [Khả năng hiển thị của các tổng hợp ivars là gì?] (Http://stackoverflow.com/questions/8510464/) từ một vài giờ trước. –