在此示例中:
@interface something : something
{
NSString *saveString;
}
-(void)saveStringForLater:(NSString*)myString
{
//do stuff with myString
...
//then save it for later
saveString = myString;
}
-(void)someOtherTimeInFuture
{
//do stuff with saveString
...
}
鉴于上述情况,我的问题是:
1)这种做法安全/正确吗?
2) 我需要担心释放 saveString 吗?
3)我应该复制字符串而不是仅仅保存指针吗?
请原谅我的无知,因为我对 Obj-C 相当陌生,但有 C++ 和 C# 背景。
谢谢!
最佳答案
这就是@properties
的用途。他们为您管理 getter 和 setter 代码,因此您不必考虑这些问题。
.h
@interface MyClass : NSObject
{
NSString *myString;
}
@property (nonatomic, retain) NSString *myString;
@end
.m
@implementation MyClass
@synthesize myString;
-(void)dealloc
{
[myString release];
[super dealloc];
}
@end
有了这些,您现在就可以谈论 self.myString 而不必担心内存了。当您分配给它时,它会进行保留。如果再次分配,它将释放第一个对象并保留新对象。然后它会保留下来,直到你的 View Controller 卸载。
您完全可以使用 iVar 来实现相同的目的(这就是您在代码示例中所做的事情),但是内存管理是由您来处理的,而且可能有点繁琐。最好使用 @property 系统来创建适当的内存管理 setter 代码。
关于iphone - 当稍后需要引用传递给类中函数的 NSString 时,正确的方法是什么? (iPhone 开发者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868187/