可能重复:
创建新实例的类方法
我想知道如何模拟 NSString、NSArray 等类的实例化:[NSArray arrayWithObject:object] ... 希望消除初始化和分配。
我可能不熟悉它的实际作用。根据文档, [NSSArray array] 创建并返回一个空数组。这到底是什么意思,任何分配?
我希望能够拥有一个自定义 NSObject 类并执行以下操作:[CustomObj customObjWithData:data]
谢谢!
可能重复:
创建新实例的类方法
我想知道如何模拟 NSString、NSArray 等类的实例化:[NSArray arrayWithObject:object] ... 希望消除初始化和分配。
我可能不熟悉它的实际作用。根据文档, [NSSArray array] 创建并返回一个空数组。这到底是什么意思,任何分配?
我希望能够拥有一个自定义 NSObject 类并执行以下操作:[CustomObj customObjWithData:data]
谢谢!
先写一个对应的自定义init...
方法:
- (id)initWithFoo:(Foo *)aFoo
{
// Do init stuff.
}
然后添加一个调用的自定义工厂方法alloc
和您的自定义init...
方法:
+ (id)customObjWithFoo:(Foo *)aFoo
{
return [[[self alloc] initWithFoo:aFoo] autorelease];
}
如果使用 ARC 编译,则省略autorelease
调用。
这些是类方法。通常,它们也有实例 init* 方法。例如...
- (id)initWithData:(NSData*)data
{
// Call appropriate super class initializer
if (self = [super init]) {
// Initialize instance with the data
}
return self;
}
+ (id)customObjWithData:(NSData*)data
{
return [[self alloc] initWithData:data];
}
现在,你可以称之为...
CustomObj *obj = [CustomObj customObjWithData:data];
这里的很多答案都是正确的。我总是自己创建一个通过 Storyboard-instantiation 轻松进行 alloc en 实例化的方法:
//FooViewController.m
+ (id)create
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
return [storyboard instantiateViewControllerWithIdentifier:@"FooViewController"];
}
+ (UINavigationController *)createWithNavagionController
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
FooViewController *fooViewController = [storyboard instantiateViewControllerWithIdentifier:@"fooViewController"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:fooViewController];
return navigationController;
}
如果您需要参数,请创建类方法,例如: createWithName:(NSString *)name
你需要做类似的事情......
+ (CustomObj *)customObjWithData:(NSData *)data {
return [[[CustomObj alloc] initWithData:data] autorelease];
}
...并实现一个 initWithData: 来处理变量的初始化。