如何创建一个没有任何特殊父级的类,该类在启动时调用函数?
或者我使用UIViewController作为没有与之关联的View Controller的类的父级并不重要吗?
答案 0 :(得分:1)
创建一个类时,不要使用UIViewController
,而是在构建iOS
个应用时将其作为默认超类,请将其更改为NSObject
。
File -> New -> File... -> Cocoa Touch -> Objective-C Class -> Next -> ...
为您的班级命名,然后从NSObject
下拉菜单中选择 subclass of
。
与许多其他OOP语言不同,Objective-C没有构造函数。相反,从NSObject
继承的所有内容都继承了alloc
方法(在堆上为对象实例创建内存空间)和默认的init
方法。
默认情况下,您使用[[MyObject alloc] init]
创建对象的实例,因此如果您覆盖init
并将代码放在此处,则会在您运行[[MyObject alloc] init]
时执行。您可以创建多个不同的init
方法,甚至可以创建factory
方法。但基本init
覆盖应如下所示:
-(instancetype)init {
self = [super init];
if(self) {
//do stuff
}
return self;
}
但我更喜欢进一步改进并编写factory
方法,因此我不必每次都输入[[MyObject alloc] init]
。 Factory
方法应该与采用相同参数的init
方法配对,它们看起来像这样:
+(instancetype)myObject{
return [MyObject alloc] init];
}
现在而不是:
MyObject *a = [[MyObject alloc] init];
你可以这样做:
MyObject *a = [MyObject myObject];
使用更复杂的init方法更有意义。例如,考虑:
MyDate *today = [[MyDate alloc] initWithYear:2013 month:11 day:14];
我们什么时候可以做:
MyDate *tday = [MyDate dateWithYear:2013 month:11 day:14];
无论initWithYear:month:day:
方法看起来如何,factory
方法都只是这样:
+(instancetype)dateWithYear:(NSInteger) y month:(NSInteger)m day:(NSInteger)d {
return [[MyDate alloc] initWithYear:y month:m day:d];
}