ios设置objective-c 中的静态变量

发布时间: 2017/3/21 22:58:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我似乎无法找到一种设置静态的 int 我已经创建了要为每个对象保存到永久内存分配唯一 id。以下给我 ' 没有分配给属性的 setter 方法 'setIdGen'。

-(void)viewDidLoad
{
    PlayerMenuController.idGen = [[NSUserDefaults standardUserDefaults] floatForKey:@"idGen"];
}

上述我试过创建静态 setIdGen 方法将返回坏访问错误和制作 NSIntegers 与他们自己设置的方法。我静 NSMutableArray 给了同样的错误,当我试图将它使用分配 = 但使用 setArray 时能正常工作。

idGen 方法︰

+ (int) idGen
{
    /*static int idGen;
    if(!idGen)
    {
        idGen = 0;
        NSLog(@"idGen reset");
    }*/
    return self.idGen;
}

解决方法 1:

更新到 2017 年

介绍了 Xcode 8 类属性到objective-c,从发行说明︰

目的-C 现在支持类与交互操作的属性 Swift 类型属性。它们被声明为 @property (class) NSString *someStringProperty; ,和从来没有合成。

这意味着我们下面的示例接口可以成为︰

@interface PlayerMenuController : NSObject

@property (class) int idGen;

@end

但是你必须仍然方法自己实现,如下所示,作为类属性永远不会合成。请注意,这也意味着如果你指定属性的特性,如 copy ,你的方法必须实现的语义。


原来的答复

它看起来像你想实现的类属性,但不是这样的事情在objective-c-属性是对实例方法。

然而,你可以假装...

虽然 @property 声明不是提供给你,如果你的编译器可能会声明类然后遵循正确的命名约定的方法 (考 Xcode 4.6.1,"可能",因为我不能随便指向此支持,但它的简单的测试,并将编译时错误,如果不) 允许您使用点表示法,即它看起来像一个类属性即使它缺乏 @property

一个示例界面︰

@interface PlayerMenuController : NSObject

// a class "property"
+ (int) idGen;
+ (void) setIdGen:(int)value;

@end

执行︰

@implementation PlayerMenuController

static int idGen = 0;

+ (int) idGen { return idGen; }
+ (void) setIdGen:(int)value { idGen = value; }

@end

并对其进行测试︰

NSLog(@"initial value: %d", PlayerMenuController.idGen);
PlayerMenuController.idGen = 42;
NSLog(@"updated value: %d", PlayerMenuController.idGen);

生产︰

initial value: 0
updated value: 42

所以我们有"类属性"-它看起来,走,叫起来像一个属性;-)

官方微信
官方QQ群
31647020