代码之家  ›  专栏  ›  技术社区  ›  Andrew Arrow

我该如何把干巴巴的(不要重复)带到目标C

  •  5
  • Andrew Arrow  · 技术社区  · 17 年前

    我从Ruby到Objective-C,一直在做:

    NSObject *foo;
    
    @property (nonatomic,retain) NSObject *foo;
    

    在.h文件中,然后在.m文件中:

    @synthesize foo;
    

    在顶部和

    [foo release]
    

    在DELOLC中。

    增加4个步骤 foo !经验丰富的Objective-C程序员是否每次都要向类中添加新的实例变量时都要手动执行这四个步骤?我是不是想找个办法把这个弄干?

    6 回复  |  直到 14 年前
        1
  •  6
  •   Carl Manaster    17 年前

    这也是C++中常见的一个问题(虽然声明有点不同,但是声明的数量增加了一倍)。简而言之,这就是语言的构造方式。因为每一句话都是独一无二的,而且有它自己的目的,所以它并不是真正的背道而驰。然而,以今天的标准来看,这无疑是非常冗长的。

        2
  •  3
  •   Alexsander Akers    14 年前

    本页 http://pragprog.com/magazines/2010-07/not-quite-new-in-ios- 声明,您可以删除变量声明,使其减少到2次,仅重复:)

    #import <UIKit/UIKit.h>
    @interface MoveMeViewController : UIViewController {
    }
    
    @property(nonatomic, retain) IBOutlet UIImageView *imageView;
    @end
    
        3
  •  1
  •   Mark Bessey    17 年前

    既然您提到了Objective-C的新特性,我想确保您知道不必为类中的每个实例变量生成属性,实际上您可能不应该这样做。

    属性表示类为其他类提供的接口。这个接口不一定与类的内部实现匹配。在它们相同的情况下,声明的属性语法使表达它(相对)变得简单。

    如果类通过属性公开了它们的大部分内部状态,那么您可能需要更仔细地查看它们的设计,以及是否可以通过转移职责来获得更简单的设计。

        4
  •  0
  •   Bill K    17 年前

    Objective-C是C之上的一个非常薄的层。在一个较低的级别上,大多数“Objective”东西编译成代码指针,注入到C编译过程中。

    他们确实添加了引用计数(最基本的垃圾收集系统),但是由于它的性质,它都是手工完成的,因此“release”调用。

    非iPhone版本增加了一个真正的垃圾收集系统,但这些系统并没有缩小规模,因为释放并不是决定性的。

    保持对象小而集中,属性语法不应该具有很强的入侵性。

        5
  •  0
  •   IlDan    17 年前

    是的,但我希望每天都有人会为Xcode提供一个脚本或其他东西来实现自动化。(我也更喜欢

    self.foo = nil 
    

    在我的交易地点)

        6
  •  0
  •   Chuck    17 年前

    当32位计算机被遗忘后,您将能够绕过必须同时声明实例变量和属性的问题,因为64位运行时可以合成实例变量。但在一种必须在头文件中声明并在另一个头文件中实现的语言中,不能完全枯燥。这种语言需要重复。唯一的方法是创造一种元语言。

    您可以使用脚本来消除反复键入同一个变量样板文件的重复,但代码中仍然会有相同的样板文件。

    顺便说一下,@synthesis语句不是重复信息。代码中没有其他内容指示使用哪些访问器访问属性。