最好返回 NSArray 还是 void 并更新 self 属性?

Posted

技术标签:

【中文标题】最好返回 NSArray 还是 void 并更新 self 属性?【英文标题】:Is it best to return NSArray or void and update self property? 【发布时间】:2011-04-08 04:36:53 【问题描述】:

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

-(NSArray)废话 返回我的数组;

或 -(无效)废话 [自我myarray:值]

--------------- 澄清以下问题

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

【问题讨论】:

【参考方案1】:

每种方法都有一个案例,具体取决于您实际在做什么。两个选择是:

它确实是一个辅助方法,在您的应用程序的许多地方都有使用。 它特定于单个类,字典是该类的成员。

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

换句话说,更喜欢:

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

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

在 C 中实践了传入要填充的空字典的替代方法,因为它围绕分配和释放创建对称性,并明确谁拥有内存。

在 Objective-C 中,引用计数处理了这一点,因此您可以避免为调用方法而分配空对象的额外代码。

例如:

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

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

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

返回一个自动释放对象,因此调用者知道如果他们想要持有一个引用,他们需要保留它。

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

类似:

- (void) setBlahFromArray:(NSArray *)array

【讨论】:

【参考方案2】:

如前所述,这个问题令人困惑。如果它们是属性,那么您的访问器方法通常包括以下内容:

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

但您似乎在问其他问题,因为这些可以由编译器为您动态合成...所以请尝试重新表述问题,我们会再次尝试提供帮助。

【讨论】:

以上是关于最好返回 NSArray 还是 void 并更新 self 属性?的主要内容,如果未能解决你的问题,请参考以下文章

返回executeFetchRequest的NSArray:结果时我应该保留,自动释放还是啥都不做?

从 NSArray objectAtIndex 返回的 NSString 是自动释放还是保留

iOS AFJSONRequestOperation 返回空结果

使用 NSExpression 组合实体并返回 NSArray 或 NSArray 元素

如何在滚动视图中显示从 Web 获取的 NSArray 数据并在 Objective C 中扩展+更新它?

NSArray 返回字符串而不是字典