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

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

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

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

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

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

【问题讨论】:

    标签: objective-c properties return self


    【解决方案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;
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 2021-01-06
        相关资源
        最近更新 更多