扩展NSMutableArray以像Java数组一样工作

Cal*_*YSR 0 arrays objective-c nsmutablearray

我正在为iphone制作RPG游戏.我想要做的是有一个库存,只允许您持有特定数量的特定类型的项目.我想这样做我只是扩展NSMutableArray并添加限制.我无法弄清楚这样做的最好方法.这是我头脑中的想法......

Backpack.h

@interface Backpack : NSMutableArray {
  Class * arrayClass;
  NSMutableArray * array;
  int limit;
}

-(id) initWithClass:(Class) type andLimit:(int) num;

@end
Run Code Online (Sandbox Code Playgroud)

Backpack.m

@implementation Backpack

  -(id)initWithClass:(Class) type andLimit:(int) num {

    arrayClass = type;
    limit = num;
    array = [NSMutableArray new];
    return self;

  }

  -(void)insertObject:(id) object atIndex:(int) index {

    if([object isKindOfClass:arrayClass] && index < limit) {
      // Insert it
    } else {
      // Throw Exception
    }

  }

@end
Run Code Online (Sandbox Code Playgroud)

CBa*_*ass 5

而不是扩展NSMutableArray,只需创建自己的类,使用NSMutableArray实例来保存项目.您的类可以有一个或多个方法,这些方法或方法要求将项添加到某个类类型(或实现特定接口).至于限制项目数量,在addItem方法的一侧,首先检查所持有的项目数量.如果它大于您的限制,则不允许添加该项目.最后,你的类可以公开一个size方法(例如getSize()),它告诉你在NSMutableArray实例中已经有多少项内部被保存,这样你就可以防止在你的背包"满"时添加项目形式.

一般来说,组合(即从其他类的成员实例组成自己的类)比扩展类和使用继承来完成相同的行为更好.例如,如果扩展NSMutableArray,那么除了您的方法之外,生成的类将公开该类的所有公共方法,从而导致代码重用和文档立场中的混乱类.

最后,你的问题实际上与Java无关,所以也许这不应该用Java标签标记.