谢谢.解决方法 主要原因:不知道堆栈大小要保留多少.
现有的惯例和用途也使解除限制相当困难.
在这种情况下,动态消息传递并不重要,因为在初始化时设置正确的“v@R_404_5991@”是微不足道的.
在c中,堆栈对象的大小始终是已知的(如果它是错误的,你知道期望什么).一个objc alloc / init序列可以返回几种类型中的任何一种 – 每种类型都具有不同的大小(它本质上是工厂),或者根本没有.
大小也可能会在运行时变化(例如,您可以通过运行时向字段添加字段).
更新1
我很好奇,所以我做了一个小测试程序作为一个概念证明.
我能够实现一个简单的基于堆栈的objc类层次结构,它也实现了一个很好的NSObject接口 – 当然,省略引用计数和动态分配接口,因为它与概念证明无关.无论如何,我的简单类层次结构与NSObject类或协议不完全兼容,因此,由于明显的原因,NSObject类型不应该被使用.因此,如果您真的需要基于堆栈的objc对象,则可能(并不特别困难)完成此任务.
你不需要做任何与c不同的东西来保留堆栈空间.堆栈大小保留在某些方面仍然是一个限制(考虑工厂方法,类集群等).
还有一些运行时功能在默认情况下不起作用.这里最好的例子是在运行时添加ivars的能力.如果您需要,您实际上可以使用此功能.我没有打扰那个练习.
自然地,基本界面可能会产生几个偏差 – 我为乐趣所做的一个偏差是增加了交换生物体的实现(类型)的能力.
玩的开心
更新2
事实证明,GCC接受了我写的概念证明.不幸的是,由于在保留正确大小时可能会遇到的问题/危险,因此考虑到语言的动态特征,这一点已被禁止.示例:clang forbIDs sizeof(NSObject).好吧.
总结以上是内存溢出为你收集整理的可可 – 为什么Objective-C对象必须动态分配?全部内容,希望文章能够帮你解决可可 – 为什么Objective-C对象必须动态分配?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)