NSString 保留在内存中
NSString remains in memory
我一直在将输入的密码转换成NSString
。
NSString * tempStr = [[NSString alloc] initWithData: [[DummyEnc sharedInstance] decDummy] encoding: NSUTF8StringEncoding];
...
...
tempStr = nil
NSString
是必需的,因为 tempStr
处理其他逻辑。
但是有一个问题tempStr
留在内存中,我该如何解决?
有什么方法可以将其用作 NSString
?
如果你想在ARC中释放tempStr
的内存,不用管它,现代的llvm编译器会自动为你处理。
如果你想在使用完后立即释放内存,也许你需要为源文件指定一个-fno-objc-arc
标志,那么你可以使用[tempStr release]
或[tempStr autorelease]
释放它。
祝你好运!
您所看到的是正常的。许多 NSStrings 在 Objective-C 中获得特殊的内存管理,这样当它们的保留计数变为零时,它们不会像普通对象一样被释放。实际上,它们是 故意 泄露的。
这是幕后实施细节,您通常不会担心(甚至不知道)。
如果这对您来说是一个安全问题(因为该字符串出现在内存转储中),请以其他方式存储该字符串,例如包装为 NSData。
我一直在将输入的密码转换成NSString
。
NSString * tempStr = [[NSString alloc] initWithData: [[DummyEnc sharedInstance] decDummy] encoding: NSUTF8StringEncoding];
...
...
tempStr = nil
NSString
是必需的,因为 tempStr
处理其他逻辑。
但是有一个问题tempStr
留在内存中,我该如何解决?
有什么方法可以将其用作 NSString
?
如果你想在ARC中释放tempStr
的内存,不用管它,现代的llvm编译器会自动为你处理。
如果你想在使用完后立即释放内存,也许你需要为源文件指定一个-fno-objc-arc
标志,那么你可以使用[tempStr release]
或[tempStr autorelease]
释放它。
祝你好运!
您所看到的是正常的。许多 NSStrings 在 Objective-C 中获得特殊的内存管理,这样当它们的保留计数变为零时,它们不会像普通对象一样被释放。实际上,它们是 故意 泄露的。
这是幕后实施细节,您通常不会担心(甚至不知道)。
如果这对您来说是一个安全问题(因为该字符串出现在内存转储中),请以其他方式存储该字符串,例如包装为 NSData。