iphone - 当稍后需要引用传递给类中函数的 NSString 时,正确的方法是什么? (iPhone 开发者)

标签 iphone objective-c memory-management nsstring cocos2d-iphone

在此示例中:

@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/

相关文章:

iOS 下载和解析大型 JSON 响应导致 CFData(存储)泄漏

objective-c - 如何在 Objective-C 中表示无穷大?

ios - 我怎样才能取消-[UIScrollView zoomToRect :animated:]?

ios - 代码 : Working In ARC and NSArrays

.NET Core 互操作,Marshal.FreeHGlobal 使程序崩溃

ios - 中间透明的UIView

iphone - 如果我们在不同的屏幕上有不同的标签,应用程序会被拒绝 - iphone

iPhone - 本地化字符串无法在设备上运行

ios - MPMoviePlayerViewController 在 iOS 10 Xcode 8 中崩溃应用程序

iphone - 触摸事件不适用于 UIScrollView 内的 UIView