Tôi luôn nghĩ rằng người ta không thể khai báo một thuộc tính đối tượng trong một thể loại. Cho đến khi đối tác của tôi đã làm điều đó trong mã của ứng dụng của chúng tôi, và nó dường như hoạt động.Vì khi nào có thể khai báo các thuộc tính Objective-C 2.0 trong một danh mục?
Tôi đã đi trên một SO và Google binge để cố gắng giải thích cho anh ta rằng không, mục tiêu-C loại chỉ có thể được sử dụng để thêm phương pháp, không phải tài sản. Tôi tìm thấy câu hỏi như:
- Setting New Property In Category Interface Implementation (nhìn vào câu trả lời được chấp nhận)
- Can I add a property for a method not in my category?
Nhưng sau đó tôi tìm thấy this link trên trang web của Apple chứa sau đây về việc kê khai @property:
Tuyên bố thuộc tính bắt đầu bằng từ khóa @property. @property có thể xuất hiện ở bất kỳ đâu trong phương thức danh sách khai báo được tìm thấy trong @interface của một lớp học. @property có thể cũng xuất hiện trong tuyên bố của giao thức hoặc danh mục. (Nhấn mạnh thêm)
Tôi biết rằng điều này không làm việc:
@interface MyClass()
NSInteger foobar;
- (void) someCategorizedMethod;
@end
Nhưng điều này biên dịch:
@interface MyClass()
@property NSInteger foobar;
- (void) someCategorizedMethod;
@end
Câu hỏi của tôi là (a) thực hành tốt nhất là những gì ở đây? và (b) là cái gì đó mới mẻ đối với mục tiêu-C 2.0, và thay vì sử dụng một iVar "thực", nó đơn giản sử dụng lưu trữ kết hợp đằng sau hậu trường để thực hiện công việc này?
Để thêm vào điều này, ví dụ đầu tiên của anh ta nơi anh ta thêm iVar là hoàn toàn hợp lệ trong llvm với -Xclang -fobjc-nonfragile-abi2 –
Sẽ là nếu anh ta thêm một chiếc ngà. Trong trường hợp đó, anh ta thêm một biến tĩnh không phải là một biến mẫu. – bbum
cảm ơn bạn đã giải thích sâu rộng. Tôi sẽ chia sẻ liên kết này với các đối tác viết mã của tôi !! – makdad