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)
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 –