Tôi biết nó hỗ trợ các biến tự động, nhưng còn về biến lớp?Các biến lớp hỗ trợ Objective-C có hỗ trợ không?
Trả lời
Ngôn ngữ không hỗ trợ biến lớp. Bạn triển khai trạng thái cụ thể theo lớp với các biến số toàn cầu static
trong các đơn vị biên dịch của việc triển khai.
Trong tiêu đề (file .h):
@interface MyClass : NSObject
+(int)val;
@end
Trong việc thực hiện (file .m):
static int val = 123;
@implementation MyClass
+(int)val {return val;}
@end
Cách sử dụng:
if ([MyClass val] > 100) ...
ngôn ngữ này phải bị hủy) – user924
@ user924 Vì tất cả các mục đích thực tế, ngôn ngữ đã chết. [Bạn đã bỏ lỡ bản ghi nhớ chưa?] (Https://developer.apple.com/swift /) – dasblinkenlight
Tôi biết, nhưng tôi cần phải sử dụng OpenCV, và ở đây chúng tôi một lần nữa bằng cách sử dụng Objective-C – user924
biến lớp ObjC là đồng bằng biến tĩnh cũ.
Foo.m
:
static int foo = 0;
Ngoài ra, bạn có thể sử dụng một không gian tên C++ nặc danh nếu bạn sử dụng ObjC++:
Foo.mm
:
namespace {
int foo = 0;
}
Nhưng có mô hình khác nếu bạn muốn hưởng lợi từ lợi thế của các thuộc tính:
Foo.h
:
@interface FooShared
@property (atomic, readwrite, strong) Foo* foo;
@end
@interface Foo
+ (FooShared*) shared;
@end
Foo.m
:
@implementation FooShared
@end
static fooShared* = nil;
@implementation Foo
+ (FooShared*) shared
{
if (fooShared == nil) fooShared = [FooShared new];
return fooShared;
}
@end
somewhere.m
:
Foo* foo …;
foo.shared.foo = …;
Nó có thể nhìn một chút quá mức cần thiết, nhưng đó là một giải pháp thú vị. Bạn sử dụng các cấu trúc và tính năng ngôn ngữ giống nhau cho cả thuộc tính dụ và thuộc tính "lớp". Atomicity theo yêu cầu, accessors khi cần thiết, gỡ lỗi, breakpoints ... Thừa kế ngay cả.
Tư duy sáng tạo có thể tìm các cách khác để làm tất cả những điều này tôi cho là. :) Nhưng bạn có khá nhiều các tùy chọn này.
@property (class, nonatomic, copy) NSString *someStringProperty;
Nhưng bạn phải cung cấp phương thức getter và setter
Từ Xcode 8 release notes: Objective-C bây giờ hỗ trợ thuộc tính của lớp, mà tương thích với thuộc tính loại Swift. Chúng được khai báo là: @property (class) NSString * someStringProperty ;. Chúng không bao giờ được tổng hợp. (23891898)
- 1. Java có hỗ trợ các biến biến không?
- 2. ActionBar (Hỗ trợ) với Fragment (hỗ trợ)
- 3. Hỗ trợ Mã VS2010 có hỗ trợ nUnit không?
- 4. Opencl có hỗ trợ các biến boolean không?
- 5. Các biến logic hỗ trợ cho .NET
- 6. Các lớp bên trong php hỗ trợ
- 7. không được hỗ trợ Lớp Version Lỗi
- 8. ORM hỗ trợ các lớp không thể thay đổi
- 9. Devexpress GridControl có hỗ trợ các hình thức giành chiến thắng hỗ trợ phân trang không?
- 10. CoreText có hỗ trợ Caps nhỏ không?
- 11. Ormlite có hỗ trợ kế thừa không?
- 12. Xcode 4.3 có hỗ trợ distcc không?
- 13. MemoryCache có hỗ trợ vùng không?
- 14. Cocos2d có hỗ trợ ARC không?
- 15. Dapper có hỗ trợ Enums không?
- 16. Spring MessageSource có hỗ trợ nhiều đường dẫn lớp không?
- 17. Tại sao F # không hỗ trợ các lớp lồng nhau?
- 18. (Object không hỗ trợ #inspect)
- 19. Lớp Ruby nào hỗ trợ .clone?
- 20. GCC có hỗ trợ các tệp lệnh
- 21. C có hỗ trợ quá tải không?
- 22. Android có hỗ trợ log2
- 23. DS.FixtureAdapter có hỗ trợ sideload không?
- 24. PowerShell có hỗ trợ OOP không?
- 25. PyCharm có hỗ trợ Jinja2 không?
- 26. Mono có hỗ trợ XAML không?
- 27. PySide có hỗ trợ Python 3 không?
- 28. Qemu/kvm có hỗ trợ ovf không?
- 29. Google Dart có hỗ trợ mixin không?
- 30. Arduino có hỗ trợ luồng không?
có thể trùng lặp của [Biến chuỗi tĩnh trong Mục tiêu C trên iphone] (http://stackoverflow.com/questions/980083/static-string-variable-in-objective-c-on-iphone) –
http : //stackoverflow.com/questions/1063229/objective-c-static-class-level-variables –