gpt4 book ai didi

iphone - 如何在编写漂亮代码的同时避免扩展 NSArray 和在 Java 中思考

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:01 29 4
gpt4 key购买 nike

我打算做两个被认为是糟糕风格的事情,但我有理由,而且我对 Cocoa 解决方案持开放态度,我只是不知道它是什么。

我想要一个 NSArray,它对 UIView 是类型安全的,然后是一个 NSArray,它对 的数组是类型安全的UIViews。 UIViews 的二维数组。

我喜欢这个,因为我实现了一个自定义的双 UITableView,它在垂直 TableView 中有一个嵌套的水平 TableView 。我会使用我的自定义 ViewsArrayViews2DArray 作为数据结构,其他程序员可以轻松地将内容提供给我的 DoubleTableView。这是想要扩展 NSArray 的充分理由吗?

我遇到的问题是我覆盖了方法的功能:

(NSArray *) initWithObjects:(id) firstObject ... 为:

(ViewsArray *) initWithViews: (UIView *) firstView, ...

但我的方法的返回值是一个NSArray,它没有包含在我的ViewsArray中的其他方法,这意味着无法识别的选定异常。我通过制作 ViewsArrayNSArray 属性暂时解决了这个问题,其中包含我的观点,但是当我想将我的内容提供给我的 双 TableView

例如:

[[self.delegate content].arraysOfViews objectAtIndex:indexPath.section];

代替

[[self.delegate content] objectAtIndex:indexPath.section];

我知道这是几个字母,但我正在尽力写出好的代码。

如何在我的 initWithViews 中返回 self 并拥有一个带有我添加的 greatestHeight 属性的 NSArraytotalWidth 等? (类型转换?)我在想这个错误吗(使用 Java/typesafity ...)?对于这样的数据结构,最佳解决方案是什么?

编辑:

为了以我认为“时尚”的方式解决我的问题,我做了以下事情:

这是我的 header (注意它是一个 NSObject):

@interface ViewsArray : NSObject

@property int greatestHeight;
@property int greatestWidth;
@property int totalWidth;

- (ViewsArray *) initWithViews: (UIView *) firstView, ...;
- (UIView *) getViewAtIndex: (NSInteger) index;
- (NSUInteger) viewCount;

@end

这是在我的实现中:

@interface ViewsArray ()

@property (retain, nonatomic) NSArray *views;

@end

这意味着我只管理一个私有(private)的 NSArray。允许漂亮的引用。

我今天学到的东西:阅读该死的文档并接受你的语言。我知道这个实例可能不会显示最后一个,但我更接近 ;)

最佳答案

简单的解决方案; 别打扰

在使用 NSArray/NSDictionary API 使用和调试 Objective-C 应用程序 18 年的过程中,我认为我只遇到过几次错误的类集合问题。在所有情况下,它都表明存在总体设计问题,而不是程序错误。

简而言之,您的应用程序控制集合的内容,除非您将错误的内容放入集合中,否则您的集合将包含您所期望的内容。在编写良好的应用程序中,可以向集合中添加内容的位置数量应该非常少,通常只有一两个位置。

如果你确实觉得需要对此进行防御,那么在向数组添加内容的一两个位置添加一个 NSAssert([... isKindOfClass:...]) .无需在检索点添加相同内容。

但是,存在一种常见的误报故障模式,即集合中的类型不正确。如果您过度释放一个对象,而某个其他类的对象恰好分配在同一位置,那么您将看到此模式的失败。

关于iphone - 如何在编写漂亮代码的同时避免扩展 NSArray 和在 Java 中思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778491/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com