【问题标题】:Generating getters & setters in XCode在 XCode 中生成 getter 和 setter
【发布时间】:2009-10-28 23:41:37
【问题描述】:

我目前正在使用 xcode 进行一些 c++ 开发,我需要生成 getter 和 setter。

我知道的唯一方法是以 Objective C 风格生成 getter 和 setter

类似的东西 - (字符串)名称; - (void)setName:(string)value;

我不想要这个;我想要在头文件中使用带有实现和声明的 c++ 样式生成。

任何想法...?

【问题讨论】:

    标签: c++ objective-c xcode getter


    【解决方案1】:

    听起来您只是一直在寻找一种方法来减少编写 getter/setter(即 property/synthesize 语句)的麻烦,对吗?

    有一个免费的macro 可以在 XCode 中使用,甚至可以在突出显示一个我认为非常有用的成员变量后自动生成 @property 和 @synthesize 语句 :)

    如果您正在寻找更强大的工具,您可能想查看另一个名为 Accessorizer 的付费工具。

    【讨论】:

      【解决方案2】:

      目标 C != C++。

      ObjectiveC 使用@property 和@synthesize 关键字为您提供自动实现(我自己目前正在学习ObjectiveC,刚买了一台Mac!)。 C++ 没有这样的东西,所以你只需要自己编写函数。

      Foo.h

      inline int GetBar( ) { return b; }
      inline void SetBar( int b ) { _b = b; }    
      

      Foo.h

      int GetBar( );
      void SetBar( int b );
      

      Foo.cpp

      #include "Foo.h"
      
      int Foo::GetBar( ) { return _b; }
      void Foo::SetBar( int b ) { _b = b; }
      

      【讨论】:

      • 是的,我知道,但我的问题是:像其他 IDE 一样,可以在 XCode 中为 c++ 生成 getter 和 setter,我知道的唯一方法是生成客观的 c 风格的 getter 和 setter
      • XCode 没有在 ObjectiveC 中生成任何东西,这是一种语言特性,XCode 是 IDE。
      • 其实不是语言特性。这是一个编译器功能。语言保持不变。
      • @ChristosSotiriou:不,@property@synthesize 是语言功能。
      • @EdS:我的意思是“属性”和“合成”是语言特性(实际上是在 Objective C 2.0 中引入的),但自动变量合成(省略“合成”的能力,以及自动创建 _var 变量)是一个编译器特性,在 Xcode 4.4 捆绑的编译器中引入。但是,如果您不同意这一点,我真的很想看到一些参考资料,因为很遗憾,我找不到任何参考资料来支持任一论点(您的或我的)。
      【解决方案3】:

      something.h:

      @interface something : NSObject
      {
         NSString *_sName;  //local
      }
      
      @property (nonatomic, retain) NSString *sName;
      
      @end
      

      something.m:

      #import "something.h"
      @implementation something
      
      @synthesize sName=_sName; //this does the set/get
      
      -(id)init
      {
      ...
      self.sName = [[NSString alloc] init];
      ...
      }
      
      ...
      
      
      -(void)dealloc
      {
         [self.sName release]; 
      }
      @end
      

      【讨论】:

      • OP 要求 C++ 实现。
      • 这段代码也泄露了——[[NSString alloc] init] 永远不会被释放。
      猜你喜欢
      • 1970-01-01
      • 2014-01-31
      • 2012-08-01
      • 2020-05-19
      • 1970-01-01
      • 2015-05-18
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多