Sau đây không khiếu nại khi biên dịch cũng như thời gian chạy về không có name
ivar. Vì vậy, tại sao nó lại phổ biến để thấy một ivar và@property/@synthesize
.Mục đích của ivar khi tài sản tồn tại là gì?
@interface PropTest : NSObject
{
}
@property (retain) NSString *name;
@end
@implementation PropTest
@synthesize name;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
PropTest *p = [[PropTest new] autorelease];
p.name = @"Hello, World!";
NSLog(@"%@",p.name);
[pool drain];
return 0;
}
Mã này in
Hello, World!
Trong thực tế, nếu tôi truy cập p->name
, tôi nhận được một cảnh báo:
warning: instance variable 'name' is @private; this will be a hard error in the future
mà chỉ ra rằng một Ivar được tạo ra cho tôi nếu một doesn' t tồn tại.
Nếu đó là sự thật, điểm tạo ra ngà bằng tay là gì (bỏ qua hiển nhiên, đôi khi có lý do hợp lệ để không sử dụng bộ truy cập g/setter)?
Hoặc được yêu cầu khác, tôi có nên chỉ bao giờ tạo một ivar cho thuộc tính khi tôi cần phải bỏ qua người truy cập không?
Tôi nghĩ như Cris cho biết có một số vấn đề không khai báo ivars. Gỡ lỗi là một trong những mà tôi chạy vào khá thường xuyên. – Ian1971