最好返回 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 元素