Objective c 自动释放池是否有自己的内存板来实现快速释放?
人们说自动释放池可以快速释放自动释放的对象。但有两种自动释放的对象:Objective c 自动释放池是否有自己的内存板来实现快速释放?,objective-c,Objective C,人们说自动释放池可以快速释放自动释放的对象。但有两种自动释放的对象: 在初始化之后自动释放的那些,例如:[[NSString alloc]init]自动释放] 在创建过程中自动删除的内容,例如NSString stringWithFormat 在我看来,如果苹果想要获得最好的性能,它会把后者变成一块板子。但是,如果id是内存指针而不是实际id,则对前者执行相同操作是不可能的 无论如何,AutoRelaySo水池有自己的内存板来实现某些对象的快速分配吗? < P>一个不能确切地说出这一点(只有一个
无论如何,AutoRelaySo水池有自己的内存板来实现某些对象的快速分配吗?
< P>一个不能确切地说出这一点(只有一个苹果工程师在泄露这个信息后会被解雇),但是如果你看看基础的替代解决方案/实现方式,例如GNUstep,你会看到“第二类型”。自动释放对象的创建方式如下:+ (NSString *) stringWithString:(NSString *)otherString
{
return [[[self alloc] initWithString:otherString] autorelease];
}
但是,自动释放池仍然可以实现自己的方法来快速释放对象。您可以再看一次GNUstep的NSAutoreleasePool.m,以了解它的具体功能
在我看来,您还不确定
id
是否是指针<强> < < /强> 不能准确地说出这一点(只有一个苹果工程师在泄露这个信息后会被开除),但是如果你看看基础的替代解决方案/实现方式,例如GNUstep,你会发现“第二类型”自动保存的对象是用如下方式创建的:
+ (NSString *) stringWithString:(NSString *)otherString
{
return [[[self alloc] initWithString:otherString] autorelease];
}
但是,自动释放池仍然可以实现自己的方法来快速释放对象。您可以再看一次GNUstep的NSAutoreleasePool.m,以了解它的具体功能
在我看来,您还不确定
id
是否是指针很方便,这是开源的!查看,特别是objc-arr.mm(对于像_objc_rootAlloc这样的东西,+alloc就是通过它来实现的),从那里您可以看到以下注释:
/* Autorelease pool implementation
A thread's autorelease pool is a stack of pointers.
Each pointer is either an object to release, or POOL_SENTINEL which is
an autorelease pool boundary.
A pool token is a pointer to the POOL_SENTINEL for that pool. When
the pool is popped, every object hotter than the sentinel is released.
The stack is divided into a doubly-linked list of pages. Pages are added
and deleted as necessary.
Thread-local storage points to the hot page, where newly autoreleased
objects are stored.
*/
不过,要直接回答你的问题,没有,没有这样的把戏。自动释放池只是有效地管理指针,而不是对象存储。很方便,这是开源的!查看,特别是objc-arr.mm(对于像_objc_rootAlloc这样的东西,+alloc就是通过它来实现的),从那里您可以看到以下注释:
/* Autorelease pool implementation
A thread's autorelease pool is a stack of pointers.
Each pointer is either an object to release, or POOL_SENTINEL which is
an autorelease pool boundary.
A pool token is a pointer to the POOL_SENTINEL for that pool. When
the pool is popped, every object hotter than the sentinel is released.
The stack is divided into a doubly-linked list of pages. Pages are added
and deleted as necessary.
Thread-local storage points to the hot page, where newly autoreleased
objects are stored.
*/
不过,要直接回答你的问题,没有,没有这样的把戏。自动释放池只是有效地管理指针,而不是对象存储。因此,假设我保留并保存stringWitFormat中的自动释放值。如果对象在“slab”中,会发生什么?您的“slab”被称为“zones”,它们被放弃了。因此,假设我保留并保存stringWitFormat中的自动释放值。如果对象在你的“板”中会发生什么?你的“板”被称为“区域”,它们被丢弃了。事实上,你可以知道,没有人被解雇!看到我的答案,并链接到来源:)@Josh Caswell我确实知道id是指针,但像往常一样,我质疑我所知道的,并承认我可能不知道一切事实上,没有人被炒鱿鱼你也能看出来!看到我的答案,并链接到来源:)@Josh Caswell我确实知道id是指针,但像往常一样,我质疑我所知道的,并承认我可能不知道一切酷,谢谢你的澄清。似乎我忽略了Obj-C运行时的一些部分…很酷,谢谢你的澄清。似乎我忽略了Obj-C运行时的一些部分。。。