![]() |
1
1
我不确定你是想改变现有类的行为,这是不安全的,还是想为你拥有的自定义类做点什么,这些类是nsobject的直接子类,很可能是。
在实践中看到的几乎所有nsstring都是私有子类的实例,该子类为与对象内联的字符串分配空间。例如,字符数据不是包含指向char*的指针,而是紧跟在对象中的ivar之后。中的extrabytes参数
所以一方面,是的,你可以像那样耍花招。另一方面,你需要知道你在做什么 你的 东西。如果您尝试使用nsstring的私有子类(它是私有的,所以您只需要通过运行时内省与之交互)执行类似的操作,则可能会发生冲突。
有一些公共cocoa类也可以做这样的事情,所以如果您的类直接继承自nsobject,那么您就最好了。nslock就是其中之一。nslock的自定义子类的内存布局如下
另外,请注意,+alloc calls+allocWithZone:,+allocWithZone:是更常见的重写点。 |
![]() |
2
0
我不知道你为什么要按照你的建议去做--我看不出你有什么理由
不能
做吧,但是根据
this post
,通常没有理由使用
编辑:
我想你在找
编辑2:
只是想说清楚(万一还没说清楚),你完全可以依赖
|
![]() |
3
-1
从技术上来说,没有什么可以阻止你超越alloc。只需在类中创建一个名为+alloc的方法。我只是想不出你为什么要这么做。 |
![]() |
4
-1
听起来你太难管理内存了。让操作系统在创建对象时动态分配内存。如果你使用过多,操作系统会发送一个通知,告诉你已经接近极限了。在那一点上你可以释放你不再需要的东西。 如果你需要太多的内存以至于不得不使用技巧,那么你的实现可能需要在核心层重新考虑,而不是试图将你的方形设计融入iphone操作系统的圆孔中。 只是我的意见基于你提供的信息。 |