Tôi vừa mới cập nhật để Xcode 4.3.2 và thấy rằng bây giờ tôi có thể khai báo các biến Ví dụ tin bên @implementation
khối như sau:Đây có phải là một cách mới để định nghĩa các biến cá thể riêng trong Objective-C không?
@interface TestClass : NSObject
@property (nonatomic, copy) NSString *testProp;
@end
@implementation TestClass {
NSString *_testPropStore;
}
- (NSString *)testProp { return _testPropStore; }
- (void)setTestProp:(NSString *)testProp { _testPropStore = [testProp copy]; }
- (id)init {
if (self = [super init]) {
_testPropStore = nil;
}
return self;
}
@end
Thông báo các NSString *_testPropStore
dòng bên @implementation
khối cú đúp.
Tôi cũng đã thử nghiệm với đoạn mã sau:
TestClass *c1 = [[TestClass alloc] init];
TestClass *c2 = [[TestClass alloc] init];
c1.testProp = @"Hello";
c2.testProp = @"World";
NSAssert(c1.testProp == c2.testProp, @"It's working!");
Mà dường như làm việc tốt. (Đó là, ứng dụng gặp sự cố với thông báo "Đang hoạt động" ở dòng NSAssert.)
Vì vậy, đây là tính năng mới của Objective-C để khai báo biến cá thể không? Kể từ khi tôi phát hiện ra điều này một cách tình cờ, tôi rất muốn biết nếu nó chỉ là để tuyên bố biến cá thể tư nhân hoặc sẽ có bất kỳ tác dụng phụ mà tôi không biết?
Tôi không thể tìm thấy bất kỳ tài liệu nào có liên quan vì hầu hết các câu hỏi thuộc loại này với từ private
vừa kết thúc với câu trả lời về cách khai báo chúng trên danh mục mở rộng riêng.
Tôi tò mò hơn về cách thực hiện điều này dưới mui xe. Thời gian chạy Objective-C biết bao nhiêu bộ nhớ để cấp phát cho lớp nếu tiêu đề có định nghĩa không đầy đủ? – mpontillo
Đó sẽ là một câu hỏi tuyệt vời để đăng. Nó gần như chắc chắn có một cái gì đó để làm với ["không mong manh ivars"] (http://www.sealiesoftware.com/blog/archive/2009/01/27/objc_explain_Non-fragile_ivars.html). –
FYI, liên kết trong câu trả lời của bạn dường như bị hỏng đối với tôi. –