objective-c - 推荐 Objective-C 中的类设计

标签 objective-c design-patterns

我是 Objective-c 的新手。出于学习目的,我正在尝试构建类似电话簿的东西。所以我将创建一个名为 Person 的类,该类将具有一些属性(姓名、电话等)。

现在我并不在乎坚持。但是,我需要一些东西来“容纳”Person 对象。所以我想创建一个名为 People 的类,但我不知道如何设计它,特别是将保存对象的 NSMutableArray。

我所做的是:

PERSON.H

@interface Person : NSObject {
   NSString *name;
}
@property(readwrite, copy) NSString *name;
@end

PERSON.M

@implementation Person
@synthesize name;
@end

人物.H

@interface People : NSObject {
   NSMutableArray *peopleArray;
}
@property(readwrite, retain) NSMutableArray *peopleArray;
- (void)addPerson:(Person *)objPerson;
@end

人物.M

@implementation People
@synthesize peopleArray;
- (id)init {
   if (![super init]) {
      return nil;
   }
   peopleArray = [[NSMutableArray alloc] retain];
   return self;
}
- (void)addPerson:(Person *)objPerson {
   [peopleArray addObject:objPerson];
}

PHONEBOOK.M

...
Person *pOne = [[Person alloc] init];
pOne.name =@"JaneDoe";

People *people = [[People alloc] init];
[people addPerson:pOne];

当我尝试使用这段代码时,我收到一个错误:_发送到未初始化的可变数组对象的方法

因此,由于我是新手,所以我的做法可能不是最好/正确的。那么,我该怎么做呢?

最佳答案

你的 people 初始化器有两个问题。它应该看起来更像这样:

- (id)init {
   self = [super init];   // always assign the result of [super init] to self.
   if (!self) {
      return nil;
   }
   peopleArray = [[NSMutableArray alloc] init];  // use init not retain.
   return self;
}

关于objective-c - 推荐 Objective-C 中的类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225955/

相关文章:

objective-c - 执行服务器请求时从后台进入前台时 iPad 应用程序崩溃

java - 这个简单工厂是否违反了开闭原则?

c# - 我应该选择什么样的设计原则/模式?

oop - 使用哪种设计模式进行顺序操作和重试

ios - RestKit 延迟加载的最佳实践

ios - 停止和启动 MonitoringForRegion 时监控区域失败 - iOS 7.1

java - 在 Mac 上打印到点阵打印机

ios - becomeFirstResponder 非常慢

c++ - 我可以在此设计中使用 dynamic_cast 以外的东西吗?

c++ - 通过多重私有(private)继承扩展类——这是一回事吗?