例如:
{
nssstring * samplestring ;
samplestring = [[nsstring alloc]init];
samplestring = [[nsstring alloc]init];
}
在此代码之后
block
第一次分配时 samplestring 指向的内存地址是否泄漏?执行?这是正常的还是错误的编码习惯。
ARC 如何处理此 block 执行后的第一次内存分配。
2.上面的代码有什么不同
{
nssstring * samplestring;
samplestring = [[nsstring alloc]init];
samplestring = nil;
}
Nil
是一个对象。对 ?所以这里似乎也是第一个 samplestring
内存分配的行为类似于 1 中的代码块。或者 nil
在内存管理中具有特殊的意义。最后,如果我想使用相同的对象名称,我应该遵循 1 还是 2。
我是通过手机问这个问题,所以请原谅格式,以防这是重复的。
最佳答案
对于 1,当你重新分配一个对象指针时,ARC 会销毁旧对象。同样,如果对象超出范围,它将被销毁
{
NSString * samplestring ;
samplestring =[ [nsstring alloc]init]; // first object created
samplestring =[ [nsstring alloc]init]; // first destroyed, second created
} // second object destroyed
对于 2,这几乎是相同的故事,除了当符号超出范围时没有什么可破坏的:
{
NSString * samplestring;
samplestring =[ [nsstring alloc]init]; // first object created
samplestring =nil; // first object destroyed
}
至于最后,如果我想使用相同的对象名称应该遵循 1 还是 2.,这并不重要,但是 2. 是多余的,因为 ARC 将正确管理对象生命周期。
最后,
nil
不是一个对象,它是一个 nil 指针,即指向空的指针。
关于ios - 多重分配和零指针分配内存概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119863/