Iphone NSStringFromCGPoint是否返回自动删除的对象?
问题#1Iphone NSStringFromCGPoint是否返回自动删除的对象?,iphone,memory,Iphone,Memory,问题#1 NSStringFromCGPoint()会返回自动释放对象吗,还是需要释放该对象 问题#2 当您有一个属性时:@property(非原子,retain)NSString*someString 您可以这样设置:self.someString=[[NSString alloc]initWithString:@“Something”]autorelease] 这是: [someString release]; someString = nil; 等于 self.someString =
NSStringFromCGPoint()
会返回自动释放对象吗,还是需要释放该对象
问题#2
当您有一个属性时:@property(非原子,retain)NSString*someString代码>
您可以这样设置:self.someString=[[NSString alloc]initWithString:@“Something”]autorelease]
这是:
[someString release];
someString = nil;
等于
self.someString = nil;
我没有具体检查过,但按照惯例,这些函数返回自动释放的对象。您可以通过设置一个最小的非ARC项目并调用-retainCount
来测试这一点,但我不确定。(通常,retainCount
不是您想要使用的东西。)
对。合成的setter类似于:
- (void)setSomeString:(NSString *)string
{
if (string != someString) {
[someString release];
}
someString = [string retain];
}
因此,无论是显式调用还是使用点表示法,旧值都会被释放(并且基础ivar被设置为nil
或您传入的任何值)
另外,我不确定您是否只是为了一个随机的示例而这样做,但您不必在内存管理代码中包装字符串文字来将其传递给属性访问器。(也就是说,self.someString=@“Something”
很好。)调用中是否包含术语“新建”、“分配”、“复制”或“创建”?如果没有,则返回的对象不是您自己的(您可以假定它是自动删除的,或者引用是在其他地方拥有的)。。从未。曾经从来没有。独角兽会哭,小猫会受伤。不要这样做。这只是一个例子谢谢你的明确回答,正如你所看到的,我接受了。事实上,我想有一个更好的方法来查看函数返回的对象是否自动删除,以防你不确定是否要信任约定。您可以将该函数调用放在它自己的小自动释放池中,然后测试指针。如果它仍然存在,你会得到一个你希望释放的物体。。。如果崩溃,对象将自动释放。不,实际上,您应该查看内存管理指南,阅读哪些关键字表示未自动释放的对象。您不能使用retainCount
测试autorelease
。@rickster的建议也行不通;未定义释放实例的消息传递以及释放时未修改内存(以及,某些对象从未释放)时的行为。