如何在启动时获取AppController类的单个实例? (它通常从笔尖加载.)你可以清理初始化和-init的使用吗?如果我理解,在启动时调用所有类的初始化.我如何使用它来创建我的AppController的实例,其中包含构成我的界面的实例变量?
希望有意义,并感谢任何帮助.
@H_404_14@解决方法 initalize在第一次或其中一个子类第一次收到消息时被发送到类.所以,当你这样做时:instance = [[[YourClass alloc] init] autorelease];
该alloc消息触发初始化.
如果你对子类做同样的事情:
instance = [[[SubclassOfYourClass alloc] init] autorelease];
该alloc消息将触发[YourClass initialize],方法与另一个消息相同(在触发[SubclassOfYourClass initialize]之前.)但只有其中一个会这样做 – 每个类的初始化永远不会被多次调用.(除非你调用它)你自己[super initialize]或[SomeClass initialize] – 所以不要这样做,因为这个方法不会期待它.)
另一方面,初始化一个新实例.在表达式[[YourClass alloc] init]中,您个人将消息直接发送到实例.您也可以通过另一个初始值设定项([[YourClass alloc] initWithSomethingElse:bar])或便利工厂([YourClass实例])间接调用它.
与initialize不同,您应始终将init(或其他初始化程序,如果适用)发送到您的超类.大多数init方法看起来大致如下:
- (ID) init { if ((self = [super init])) { framistan = [[Framistan alloc] init]; } return self;}
细节不同(这个方法或者超类或两者都可能有参数,有些人更喜欢self = [super init]在自己的行上,而Wil Shipley doesn’t assign to self
at all),但基本思路是一样的:调用[super init [WithSomething:…] ],确保它没有返回nil,如果没有则设置实例,并返回超类返回的内容.
这意味着你可以从init返回nil,事实上你可以.如果这样做,你应该[自我释放],这样你就不会泄漏失败的对象. (为了检测无效的参数值,另一种选择是NSParameterassert,如果断言失败则抛出异常.每个参数的相对优点都超出了这个问题的范围.)
How can I use this to create an instance of my AppController with instance variables that make up my interface?
最好的方法是在main中完成所有 *** 作:
int main(int argc,char **argv) { NSautoreleasePool *pool = [[NSautoreleasePool alloc] init]; AppController *controller = [[[AppController alloc] init] autorelease]; [[NSApplication sharedApplication] setDelegate:controller]; //Assuming you want it as your app delegate,which is likely int status = NSApplicationMain(argc,argv); [pool drain]; return status;}
您将在AppController中的应用程序委托方法中进行任何其他设置.
你已经知道了这一点,但对于其他读过这篇文章的人来说:笔尖是你的朋友. Interface Builder是您的朋友.不要与框架作斗争,并以图形方式构建您的界面,您的应用程序将更好.
总结以上是内存溢出为你收集整理的objective-c – 没有Interface Builder的Cocoa,初始化app控制器的实例?全部内容,希望文章能够帮你解决objective-c – 没有Interface Builder的Cocoa,初始化app控制器的实例?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)