我正在处理一个控制多个视图的委托类,并发现自己在委托中更新属性和从方法返回值之间切换。这样做的正确方法是什么?
- (NSArray的)等等{ 返回myarray; }
或 - (无效)等等{ [自我myarray:价值] }
---------------澄清下面的问题
如果我有一个将NSArray转换为NSDictionary的辅助方法 我应该调用我的帮助器方法并期望返回NSDictionary,或者我应该更新内存中的变量并返回void。
答案 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