我想知道我怎样才能做到我用Java做的事情。
public class ObjectHolder {
private List<Object> holder;
public ObjectHolder() {
// initialize object holder...
}
public boolean addObject(Object obj) {
// add object and return true/false
}
}
这种方法的好处在于持有者无法直接操纵。 我试图理解如何在Objective-c中实现这一点,特别是我制作了这个Objective-c类接口:
@interface ObjectHolder : NSObject {
NSMutableArray *holder;
}
+(ObjectHolder*)holderWithObjects:(NSArray*)objs;
-(BOOL)addObject:(NSObject*)obj;
@end
但这是我的问题开始的地方,特别是在类方法holderWithObjects:
中+(ObjectHolder*)holderWithObjects:(NSArray*)objs {
ObjectHolder *oh = [[[ObjectHolder alloc] init] autorelease];
oh->holder= // array initialization and retain
for(NSObject obj in objs) {
// add to holder array
[oh->holder addObject:obj];
}
return oh;
}
答案 0 :(得分:0)
你可以这样做,例如像这样:
.h文件:
@interface ObjectHolder : NSObject {
NSMutableArray *holder;
}
+(ObjectHolder*)holderWithObjects:(NSArray*)objs;
-(void)addObject:(id)obj;
@end
.m文件:
+ (ObjectHolder*)holderWithObjects:(NSArray*)objs {
ObjectHolder *oh = [[[ObjectHolder alloc] init] autorelease];
for(id obj in objs) {
[oh addObject:obj];
}
return oh;
}
- (void)addObject:(id)obj {
if (holder == nil) {
holder = [[NSMutableArray alloc] init];
}
[holder addObject:obj];
}
- (void)dealloc {
[holder release];
[super dealloc];
}
一些注意事项:
NSMutableArray
的{{1}}返回void,因此从您的方法返回-addObject:
确实没用,除非您想要一些特定的行为(比如避免数组中的重复 - 那么也许BOOL
会更好吗?等等。)NSSet
比id
更通用,在大多数情况下,您更喜欢使用它,有关详细信息,请参阅this blog post NSObject *
,因此您可以在nil
中检查持有者值,并在需要时懒惰地初始化它。否则,您只需在-addObject:
方法中初始化holder
- 这相当于Java中的构造函数-init
方法-dealloc
这样的方法来帮助您避免遍历数组并逐个添加对象