【问题标题】:Accessing public fields in Objective C访问 Objective C 中的公共字段
【发布时间】:2012-05-30 04:20:31
【问题描述】:

我尝试了以下示例代码:

 #import "Foundation/Foundation.h"

    @接口示例
    {
        @public NSString* 名称;
    }
    @结尾

    @实现示例 @end

    主函数()
    {
        例子*我;
        我->名字=@“世界”;
    }

在这一点上,我的代码似乎讨厌我。我确实理解公开一个字段是多么糟糕的主意,但我不确定为什么我在 main() 的最后一行出现错误。

【问题讨论】:

  • 您遇到了什么错误?
  • 哇哦。我真笨。忘记分配内存。编辑:看起来有人注意到了。
  • 不要像这样访问实例变量 使用访问器方法。 总是。
  • @bbum 是的,我确实注意到我的原始帖子中的做法有多糟糕。只是想了解如何做到这一点,只是因为我想了解这种语言的内在。

标签: objective-c field public


【解决方案1】:

您没有分配或初始化您的 me 变量。您可能想从NSObject 继承,然后使用它:

example *me = [[example alloc] init]

至少你需要alloc它。

【讨论】:

    【解决方案2】:

    您需要先初始化变量,然后才能访问它。你也应该从NSObject 派生你的类。

    #import "Foundation/Foundation.h"
    
    @interface example : NSObject
    {
        @public NSString* name;
    }
    @end
    
    @implementation example @end
    
    int main()
    {
        example* me = [[example alloc] init];
        me->name = @"World";
    }
    

    【讨论】:

      【解决方案3】:

      这里有很多错误

      你的类应该是NSObject的子类,所以它应该被声明为

      @interface example : NSObject
      {
          @public NSString* name;
      }
      
      @end
      

      接下来你实际上需要一个类的实例来获取它的值,例如

      example *me = [[example alloc] init];
      NSLog(@"%@", me->name);
      

      下一个类以大写字母开头,通常带有前缀,例如我会用

      PSExample
      

      接下来请不要像这样访问实例变量,您应该通过访问器使您的对象状态可用,而不是直接访问。

      【讨论】:

        猜你喜欢
        • 2013-06-22
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2016-12-14
        • 2020-06-20
        相关资源
        最近更新 更多