返回NSArray或无效并更新自己的属性是最好的吗?

时间:2011-04-08 04:36:53

标签: objective-c properties return self

我正在处理一个控制多个视图的委托类,并发现自己在委托中更新属性和从方法返回值之间切换。这样做的正确方法是什么?

- (NSArray的)等等{  返回myarray; }

或 - (无效)等等{  [自我myarray:价值] }

---------------澄清下面的问题

如果我有一个将NSArray转换为NSDictionary的辅助方法 我应该调用我的帮助器方法并期望返回NSDictionary,或者我应该更新内存中的变量并返回void。

2 个答案:

答案 0 :(得分:0)

如上所述,这个问题令人困惑。如果它们是属性,则您具有通常包含以下内容的访问器方法:

-(void) setMyValue: (NSString*) inNewValue;
-(NSString*) myValue;

但似乎你可能会问别的东西,因为这些可以由编译器为你动态合成......所以试着重新解释这个问题,我们会再次尝试帮助。

答案 1 :(得分:0)

每种方法都有一个案例,具体取决于你的确在做什么。这两个选择是:

  • 它确实是一种帮助方法,可以在您的应用程序中的许多地方使用。
  • 它特定于单个类,而字典是该类的成员。

选项1)如果它确实是一个辅助方法,我相信你应该从方法中返回NSDictionary。我假设它是在该方法中新分配的。

换句话说,更喜欢:

+ (NSDictionary *) dictFromArray:(NSArray *);

如果它在单个类之外有实用程序,你可以把它放在一个合理的类中,收集相关的实用方法。

传入一个空填充字典的替代方法是在C中实现的,因为它创建了关于分配和释放的对称性,并清楚地表明了谁拥有内存。

在Objective-C中,引用计数会解决这个问题,因此您可以避免分配空对象的额外代码,只是为了调用方法。

例如:

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
dictFromArray(myArray, myDict);

当涉及知道谁拥有该对象时,您应该坚持Objective-C约定,其中:

+ (NSDictionary *) dictFromArray:(NSArray *)array

返回一个autorelease对象,因此调用者知道如果他们想要保留引用,他们需要保留它。

选项2)如果功能特定于单个类,并且该类将字典作为成员,那么我将传入数组,使用数组内容更新字典成员变量,并返回void。

类似的东西:

- (void) setBlahFromArray:(NSArray *)array