Objective c 初始、分配和保留以及;初始值永远不会被读取";
我已经使用静态分析器查看了我的代码,并得出了以下问题Objective c 初始、分配和保留以及;初始值永远不会被读取";,objective-c,ios,Objective C,Ios,我已经使用静态分析器查看了我的代码,并得出了以下问题 NSString *string = [[NSString alloc] init]; string = [object name]; 这给了我一个内存错误,表示从未读取初始值。 我将其替换为以下内容 NSString *string = [[object name]retain]; 这种编码是否更好/正确 干杯此代码: 1: NSString *string = [[NSString alloc] init]; 2: string =
NSString *string = [[NSString alloc] init];
string = [object name];
这给了我一个内存错误,表示从未读取初始值。
我将其替换为以下内容
NSString *string = [[object name]retain];
这种编码是否更好/正确
干杯此代码:
1: NSString *string = [[NSString alloc] init];
2: string = [object name];
不正确,因为在第1:行中分配了新内存,并将对它的引用存储在变量字符串中。在第2行:您将对另一个内存位置的引用存储在变量字符串中
结果,您没有读取在1:行分配的内存值,甚至没有释放它。此外,这里还有内存泄漏
如果要将引用保存到内存中的某个位置,则不需要alloc+init
。当您想在内存中分配一些空间来写入数据或从中读取数据时,应该使用alloc+init
。我见过其他人做过同样的事情<代码>NSString*string=[[NSString alloc]init]代码>创建新对象并将其指定给字符串<代码>字符串=[对象名称]代码>将对象的名称指定给字符串。这类似于说inta=0;a=4
,0
对4
没有影响。代码的问题是[[NSString alloc]init]
创建了一个保留计数为1的新对象,因为您没有释放它,它会泄漏<代码>[对象名称]
返回自动释放的对象,该对象将在运行循环结束时消失
简而言之,使用NSString*string=[[objectname]retain]
您的变量string
实际上是指向NSString
对象的指针。代码的第一行创建了一个新的空字符串,并将指向它的指针指定给string
。然后,第二行代码立即用指向完全不同字符串的指针覆盖该指针。您从未读取原始值,并且无法访问分配的NSString
,因此它已泄漏
第二个选项是正确的,前提是您稍后在某处释放/自动释放它