首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么-init是一个实例方法并+初始化一个类方法?

为什么-init是一个实例方法并+初始化一个类方法?
EN

Stack Overflow用户
提问于 2014-02-18 02:25:00
回答 2查看 85关注 0票数 0

在Cocoa中,对于NSObjectinitinitialize不应该都是类方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-18 02:27:37

可以重写+initialize (它是可选的)来执行类范围的初始化。-init执行类的单个实例的初始化,尽管它通常是通过在派生自NSObject的类中添加参数(例如:UIView的initWithFrame:方法)来改进的。

由于-init初始化单个实例(特别是,它可以访问实例的变量),所以它不能是类方法。

票数 3
EN

Stack Overflow用户

发布于 2014-02-18 02:30:28

从医生那里:

运行时在类或从类继承的任何类从程序内部发送其第一条消息之前,将初始化发送到程序中的每个类。

这意味着当您第一次向类发送消息时,无论是alloc还是某个已定义的类方法,initialize都会首先被调用一次,用于整个应用程序的运行。与load不同的是,可以在项目中包含一个类,而不按initialize

另一方面,init

由子类实现,以便在为新对象分配内存后立即初始化新对象(接收方)。

这意味着,init仅用于初始化类实例。

编辑--

在经过编辑的问题之后,allocinit初始化实例时创建实例,这就是为什么alloc是类方法而init是实例方法的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21843183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档