PLJ*_*JNS 2 iphone macos objective-c ipad ios
我要做两件被认为是坏风格的东西,但我有理由,而且我对Cocoa解决方案持开放态度,我只是不知道它是什么.
我想要一个NSArray对a类型安全的类型UIView,然后NSArray对UIViews的数组安全类型.一个2D数组UIViews.
我喜欢这个,因为我已经实现了一个自定义double UITableView,它在垂直表视图中有一个嵌套的水平表视图.我会使用我的自定义ViewsArray和Views2DArray数据结构,其他程序员很容易给我的内容DoubleTableView.这是一个想扩展的充分理由NSArray吗?
我遇到的问题是我已经覆盖了该方法的功能:
(NSArray *) initWithObjects:(id) firstObject ... 如:
(ViewsArray *) initWithViews: (UIView *) firstView, ...
但是我的方法的返回值是a NSArray,它没有包含在我的其他方法中ViewsArray,这意味着无法识别的选定异常.我通过制作一个包含我的观点的NSArray属性暂时解决了这个问题ViewsArray,但是当我想将我的内容提供给我的时候,这会产生难看的代码DoubleTableView.
例如:
[[self.delegate content].arraysOfViews objectAtIndex:indexPath.section];
代替
[[self.delegate content] objectAtIndex:indexPath.section];
我知道这是几封信,但我正在努力编写好的代码.
我怎样才能回到self我initWithViews和有NSArray我的添加的属性greatestHeight,totalWidth等等?(Casting?)我在考虑这个错误(使用Java /类型...)?对于像这样的数据结构,最好的解决方案是什么?
编辑:
为了以我认为"时尚"的方式解决我的问题,我做了以下事情:
这是我的标题(注意它是一个NSObject):
@interface ViewsArray : NSObject
@property int greatestHeight;
@property int greatestWidth;
@property int totalWidth;
- (ViewsArray *) initWithViews: (UIView *) firstView, ...;
- (UIView *) getViewAtIndex: (NSInteger) index;
- (NSUInteger) viewCount;
@end
Run Code Online (Sandbox Code Playgroud)
这是我的实施:
@interface ViewsArray ()
@property (retain, nonatomic) NSArray *views;
@end
Run Code Online (Sandbox Code Playgroud)
这意味着我只管理一个私人NSArray.允许漂亮的参考.
我今天学到的东西:阅读该死的文档并接受你的语言.我知道这个实例可能没有显示最后一个,但我更接近;)
轻松解决; 不要打扰.
在使用和调试使用NSArray/NSDictionary API 18年的Objective-C应用程序时,我认为我只遇到了错误的收集类问题.在所有情况下,它都表明了一个总体设计问题,而不是程序错误.
简而言之,您的应用程序控制集合的内容,除非您在集合中粘贴错误的内容,否则您的集合将包含您期望的内容.在编写良好的应用程序中,可能会向集合中添加内容的位置数量应该非常小,通常只有一个或两个位置.
如果你确实觉得需要对此采取防御措施,那么NSAssert([... isKindOfClass:...])在一个或两个向阵列添加内容的位置添加一个.无需在检索点添加相同内容.
但是,有一种常见的假阳性失败模式,在集合中看起来似乎是不正确的类型.如果过度释放对象并且某个其他类的对象恰好在同一位置分配,那么您将看到此模式的失败.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |