标签: cocoa-design-patterns

一个UITableView - 多个数据源,最佳设计模式?

这似乎是一个典型的问题,但我有一个UITableView,它对两个独立的数据源具有相同的行为.设计类层次结构以获得尽可能少的重复和if/else条件的最佳方法是什么?视图控制器将对两个数据源执行相同的操作,它们在数据集中只是唯一的.我应该让父控制器只设置其数据源/相应的标题吗?

当使用UISegmentControl显示具有相同接口但具有不同数据源的两个视图时,同样的问题也是相关的.

oop iphone cocoa-touch cocoa-design-patterns

5
推荐指数
1
解决办法
3763
查看次数

UIButton - 我们应该发布还是不发布?

我想动态地在视图上添加一个按钮.这是代码.

UIButton *x=[UIButton buttonWithType:UIButtonTypeRoundedRect];
Run Code Online (Sandbox Code Playgroud)

在这里,我没有使用"alloc"功能.

本声明的问题如下.

  • 如果我们在相同的情况下使用imageview,我们必须创建一个临时imageview添加到您当前的视图并释放它.按钮怎么办?
  • 如何分配和取消分配按钮?
  • 如果分配了按钮?如何管理内存?
  • 现在当我使用[x release]; - 是对还是错?

iphone objective-c interface-builder uibutton cocoa-design-patterns

5
推荐指数
1
解决办法
3077
查看次数

核心数据模式:如何通过网络变化有效地更新本地信息?

我的应用程序效率低下,我想了解并修复.

我的算法是:

fetch object collection from network
for each object:
  if (corresponding locally stored object not found): -- A
    create object
    if (a nested related object locally not found): -- B
      create a related object
Run Code Online (Sandbox Code Playgroud)

我正在通过使用相关对象的键创建谓词查询来检查A行和B行,该键是我的模式的一部分.我看到A(总是)和B(如果执行分支到该部分)生成一个SQL选择,如:

2010-02-05 01:57:51.092 app[393:207] CoreData: sql: SELECT <a bunch of fields> FROM ZTABLE1 t0 WHERE  t0.ZID = ? 
2010-02-05 01:57:51.097 app[393:207] CoreData: annotation: sql connection fetch time: 0.0046s
2010-02-05 01:57:51.100 app[393:207] CoreData: annotation: total fetch execution time: 0.0074s for 0 rows.
2010-02-05 01:57:51.125 app[393:207] CoreData: …
Run Code Online (Sandbox Code Playgroud)

iphone performance core-data nsfetchrequest cocoa-design-patterns

5
推荐指数
1
解决办法
5249
查看次数

Cocoa Application Bootstrap问题

我是一名经验丰富的开发人员,是Mac开发的新手,所以我

还有很多差距,我很难找到好的可读性.我的一些问题列在下面.这些非常简单/一般.必须有一个简短,简洁的文档,详细说明基本的应用程序引导过程,以及所有涉及的类.谢谢!

  • 由XCode生成的"委托"包含NSPersistentStoreCoordinator,NSManagedObjectModel和NSManagedObjectContext的实例 - 请详细说明?
  • 委托被声明为"@interface tests_AppDelegate:NSObject {".为什么协议丢失了?我在那里看到网上的例子.
  • 我看到应用程序委托在Interface Builder中实例化.它在哪里传递到NSApplication实例?

macos cocoa cocoa-design-patterns

5
推荐指数
1
解决办法
357
查看次数

Java命令模式与iPhone代表模式

嗨,我是一名java开发人员,这些天我也开始从事iphone开发.我想知道Java的命令模式有点类似于iphone中的委托模式,反之亦然,因为两者都有其他人在为受让人工作.有人可以启发我这个吗?

java design-patterns cocoa-design-patterns ios4

5
推荐指数
1
解决办法
1081
查看次数

对Cocoa绘图应用程序的建议

我是Cocoa的新手,正在为经验丰富的Cocoa-ers的应用程序寻找一些建议. 

我正在构建一个基本的OmniGraffle风格的应用程序,其中对象被绘制/拖动到画布上.在对象在画布上之后,可以选择它们来修改它们的属性(填充颜色,笔触颜色/宽度等),调整大小,移动到新位置等.

为了得到热身,我写了一个基本的绘图应用程序,用于创建由鼠标在自定义上绘制的对象(圆形,矩形等)NSView,将对象添加到NSArray集合中,并将集合的内容呈现到视图中.我可以继续这样,但我将不得不添加对检测对象选择,解析z-indexing,焦点突出显示,拖动句柄等所有相关渲染的支持.此外,渲染每个周期的每个对象似乎非常浪费.

似乎更好的方法是将轻量级视图对象拖放到画布上,该画布能够检测自身上的鼠标事件,绘制自己及其聚焦环等等.然而,虽然NSView看起来像是具有这些属性的对象,但我在网上看到很多关于它是一个有很多包袱的重量级组件的喋喋不休.我偶然发现了它NSCell并且已经阅读了它们,但我不确定它们是否是正确的选择.

有什么建议?如果你能在正确的方向上推动我,我会非常感激.

cocoa drawing nsview cocoa-design-patterns

5
推荐指数
1
解决办法
421
查看次数

单身人士与代表:好主意还是坏主意?

我创建了作为Web服务接口的对象.一个典型的对象是"TaskService".当客户端使用其中一个对象时,它会调用其中一个服务的方法(例如"GetTasks"),并且该服务将异步关闭以调用远程Web服务,并通过委托回发检索到的数据.

目前,要使用这些服务之一,您必须使用[[TaskService alloc] init]创建它,但我认为将每个服务转换为单个对象更有意义.

看到包含对委托的引用的单例对象是否常见?我设计的主要问题是每个对象,无论何时需要使用特定服务,都必须在调用服务之前将自己设置为委托,这对我来说似乎不太合适......如果另一个对象怎么办?是否将自己设置为代理并调用服务?

提前谢谢了!

问候,尼克

singleton delegates objective-c cocoa-design-patterns

5
推荐指数
1
解决办法
3894
查看次数

继承的@property不能满足<protocol> @property吗?

我有一个协议:

@protocol Gadget <NSObject>

@property (readonly) UIView *view;

- (void) attachViewToParent:(UIView *)parentView;

@end
Run Code Online (Sandbox Code Playgroud)

和一个"抽象"基类,具有以下实现(作为getter,未显示)-(UIView *)view:

// Base functionality
@interface AbstractGadget : NSObject {
    UIView *view;
}

@property (readonly) UIView *view;

@end
Run Code Online (Sandbox Code Playgroud)

但是当我Gadget在子类中实现协议时AbstractGadget,如下所示:

// Concrete
@interface BlueGadget : AbstractGadget <Gadget> {
}

- (void) attachViewToParent:(UIView *)parentView;

@end


@implementation BlueGadget

- (void) attachViewToParent:(UIView *)parentView {
    //...
}

@end
Run Code Online (Sandbox Code Playgroud)

我收到编译错误告诉我" 警告:属性'视图'需要定义方法'-view'." 我可以使用@dynamic或添加存根方法使其消失:

- (UIView *) view {
    return [super view];
}
Run Code Online (Sandbox Code Playgroud)

但我只是想知道我做的是不支持的东西,我不应该做的事情,或者它只是编译器中的限制/错误?

oop cocoa objective-c cocoa-design-patterns

4
推荐指数
1
解决办法
950
查看次数

这是一个很好的(类似Cocoa,Apple批准的)模型类吗?

我一直在使用Objective-C,但我并没有很好地遵循Apple的指导方针.最近我读了Cocoa设计模式模型对象实现指南,我正在尝试做一些非常简单的事情,但是做得非常好.

我错过了任何重大概念吗?请不要提self = [super init]; 已经在SO上多次报道了.#pragma mark尽管如此,请随意批评我的!

#import "IRTileset.h"
#import "IRTileTemplate.h"

@interface IRTileset () //No longer lists protocols because of Felixyz

@property (retain) NSMutableArray* tileTemplates; //Added because of TechZen

@end

#pragma mark -
@implementation IRTileset

#pragma mark -
#pragma mark Initialization

- (IRTileset*)init
{
    if (![super init])
    {
        return nil;
    }

    tileTemplates = [NSMutableArray new];

    return self;
}

- (void)dealloc
{
    [tileTemplates release];
    [uniqueID release]; //Added because of Felixyz (and because OOPS. …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c models cocoa-design-patterns

3
推荐指数
1
解决办法
544
查看次数

NSCoder和/或NSKeyedUnarchiver如何处理同一对象的多个解码?

我想知道如何NSCoder处理下次解码时由多个对象共享和编码的对象.它会制作对象的两个副本,还是会解码并在解码它的所有其他对象之间共享一个对象?

我提供了一个类似下面这种情况的小例子.

例:

  1. 应用程序启动
  2. 对象A和对象B将对象C设置为其委托
  3. 应用程序收到终止通知
  4. 对象A和对象B 编码自身及其所有对象(包括其委托)
  5. 应用程序关闭并重新启动
  6. 对象A和对象B 解码自身及其所有对象(包括其委托)

对象A和对象B在步骤6之后是否共享相同的解码对象,或者它们各自都有自己的副本?

macos objective-c nscoding cocoa-design-patterns nscoder

3
推荐指数
2
解决办法
1026
查看次数