创建没有init方法的类(Objective-c)

Cas*_*ash 8 objective-c

是否可以创建一个没有init方法的类,以强制所有调用者使用工厂方法创建对象?

小智 5

所以基本上,你想确保你的类永远不会使用-init初始化,对吧?你不能这样做正是你想做的事,但你可以接近.

由于您从NSObject继承,因此您有一个init方法,并且您无法阻止它被调用.也就是说,你可以覆盖init到这个:

- (id)init
{
   [self dealloc];
   @throw [NSException exceptionWithName:@"MyExceptionName" reason:@"Reason" userInfo:nil];
   return nil;
}
Run Code Online (Sandbox Code Playgroud)

这样,只要有人调用你的-init方法,它就会杀死对象,所以实际上你的init方法几乎是不可调用的.

  • zneak - 定期使用异常来编程错误.在正确的应用程序中,不会在运行时抛出异常.这是一个编程错误,所以没关系.Casebash - 是的,调用`[self doesNotRecognizeSelector:]`.这实际上是处理这个init情况的推荐方法.见[这些文档] [1].[1] http://developer.apple.com/mac/library/documentation/cocoa/reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/doesNotRecognizeSelector: (3认同)