【问题标题】:how to declare UInt32 variable with global class access如何使用全局类访问声明 UInt32 变量
【发布时间】:2012-03-08 02:29:04
【问题描述】:

我正在尝试声明一个 UInt32 变量,该变量可以通过类中的任何方法访问..

所以它对类方法是全局的,而不是对任何其他类...

我正在尝试在 .h 中这样做

@interface EngineRequests : NSObject {

    UInt32 dataVersion;
}

@property (copy) UInt32 dataVersion;

但这不起作用..我在@property等行上遇到错误..我什至需要那个还是只使用顶部的UInt32就可以了。

【问题讨论】:

    标签: iphone ios uint32


    【解决方案1】:

    你可以试试

    @interface EngineRequests : NSObject {
    @protected
       UInt32 dataVersion;
    }
    
    @property (assign) UInt32 dataVersion;
    @end
    
    @implementation EngineRequests
    
    @synthesize dataVersion;
    
    // methods can access self.dataVersion
    
    @end
    

    但您实际上并不需要该属性,除非您想授予/控制外部访问权限。你可以在类接口中声明UInt32 dataVersion,然后在没有self.的实现中引用dataVersion。无论哪种方式,@protected都会阻止外部类直接访问dataVersion

    你读过Objective-C Properties吗?

    初始化

    您的EngineRequestsNSObject 的子类。因此,您可以(通常应该)覆盖NSObject-(id)init 方法,如下所示:

    -(id)init {
       self = [super init];
       if (self != nil) {
          self.dataVersion = 8675309; // omit 'self.' if you have no '@property'
       }
       return self;
    }
    

    或者创建你自己的-(id)initWithVersion:(UInt32)version;

    【讨论】:

    • 效果很好,假设我有一个方法可以通过参数初始化 UInt32 var,我该怎么做?我试过这个 - (void) initalizePacketVariables:(UInt32)version {//... 但是那会导致错误..
    • 添加了更新。您在评论中描述的方法也可以正常工作。 init 是 Cocoa 中的最佳实践。
    • 好的很酷..我会试着把这一切弄清楚。感谢您的帮助
    • 刚刚意识到为什么它不起作用..我在贴花我的方法的地方我没有更改为只是 (UInt32) 我仍然有 (UInt32 *).. 在我学会这个技巧之前有多少次。大声笑
    • 哎呀,是的,我猜你想要真正的价值。谢谢你的道具!
    【解决方案2】:

    您需要仅在接口内声明变量,以使其对所有类方法可见。使用 @property.... 创建 getter-setter 将使其成为类变量,并且在类外可见。你必须这样做。

    @interface EngineRequests : NSObject {

    UInt32 dataVersion;
    

    }

    仅此而已。

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 2014-10-30
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多