简洁的属性

时间:2011-04-20 08:25:26

标签: objective-c

我想这个问题的答案是“不”,但我想确定一下。在Objective C中有一个方便的方法来拥有很多对象属性吗?如果我使用属性,我必须写四行只是为了有一个属性:

Foo.h:

@interface Foo : NSObject {
    NSString *str; // first line
}
@property (copy) NSString *str; // second line

Foo.m:

@implementation Foo
@synthesize str; // third line

(void) dealloc {
    [str release]; // fourth line
    ...
}

另一方面,每次设置str都没有属性我必须释放前一个,并且仍然需要在dealloc上释放。是否有更方便的方式或者可能是XCode4快捷方式来声明属性?

2 个答案:

答案 0 :(得分:1)

您可以保存“第一行”,即变量定义(但是您必须将“第四行”更改为self.str = nil;)。 Objective-C支持根据需要为您的属性生成隐式变量,但此功能并非在所有平台上都可用:它可在iOS和Mac 64位上使用,但不适用于Mac 32位。

答案 1 :(得分:1)

如果您愿意使用第三方脚本/服务,David Hoerl最近发布了一个有助于管理实例变量和声明属性的文件。

来自his announcement

  

宣布PropertyMaster Xcode脚本(和Automator服务)的1.0版本,以协助iOS(在较小程度上,Cocoa)开发人员将现有的基于ivar的代码转换为所有属性,并维护属性/ viewDidAlloc / dealloc关系。 / p>      

作为Xcode 3脚本(或作为Xcode 4的服务)安装后,您可以选择包含ivars和属性的接口文件,并将任何ivars转换为属性,以便随后删除所有ivars。它将一个大的文本blob粘贴到剪贴板上,您可以将其粘贴回接口和实现文件以及有序和分类的合成行,viewDidUnload和dealloc方法。它还允许您选择和处理包含属性的类扩展,并重新生成合并的blob。

     

此外,它有一个高度可定制的系统来识别弱ivars,并在发布之前产生最终的“关闭”语句(即foo.delegate = nil,[foo release];)

如果公告中的网址无效,请尝试this one