我知道它支持自动变量,但对于类变量?
Answer 1:
语言不支持类变量。 你与全球实现类特定状态static
在执行的编译单元的变量。
在头(h文件):
@interface MyClass : NSObject
+(int)val;
@end
在实现(.m文件):
static int val = 123;
@implementation MyClass
+(int)val {return val;}
@end
用法:
if ([MyClass val] > 100) ...
Answer 2:
ObjC类变量是普通的旧的静态变量。
Foo.m
:
static int foo = 0;
另外,如果你使用,你可以使用C ++匿名命名空间ObjC ++:
Foo.mm
:
namespace {
int foo = 0;
}
但还有另一种模式,如果你想从性的优势中获益:
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 = …;
它可能看起来有点大材小用,但它是一个有趣的解决方案。 您可以使用相同的结构和语言特性实例属性和“类”属性都。 按需原子性,即使访问器在需要的时候,调试,断点......继承。
创造性思维可以找到其他方法可以做到这一切,我想。 :)但是,你几乎覆盖这些选项。
Answer 3:
@property (class, nonatomic, copy) NSString *someStringProperty;
但是你必须提供getter和setter
从Xcode的8发布说明:目的-C现在支持类的属性,这与夫特型特性互操作。 它们的声明:@property(类)的NSString * someStringProperty ;. 他们从来没有合成。 (23891898)
文章来源: Does Objective-C support class variables?