【发布时间】:2011-04-13 16:16:23
【问题描述】:
大家好,我还是 iPhone 开发的新手,但对其他编程语言有丰富的经验。让我大吃一惊的是 Obj-C 内存管理和正确释放/保留。我知道这个概念,我知道“一旦我理解它就会很容易”,但我并不完全在那里,这让我发疯。在这里,我有一段简单的代码,其中包含类和方法,只需将一个字符添加到现有字符串中,该字符串被合成后用作类属性……例如,该类称为 myClass ...
myClas.h
@interface myClass : NSObject {
@private
NSString* someCommonString;
}
@propery (retain, nonatomic) NSString* someCommonString;
myClass.m
...
@synthesize someCommonString;
- (id) init
{
self = [super init];
if(self)
{
someCommonString = [[NSString alloc] initWith String:@"one "];
}
}
- (NSString*) appendString:(NSString*) stringToAdd
{
NSString* result = [someCommonString stringByAppendingString: stringToAdd];
return result;
}
- (void) doTheJob
{
NSString* test1 = @"two ";
NSString* test2 = [[NSString alloc] initWithString: @"three "];
NSString* test3 = [NSString stringWithFormat:@"four "];
self.someCommonString = [self appendString:test1];
self.someCommonString = [self appendString:test2];
self.someCommonString = [self appendString:test3];
NSLog(@"%@", someCommonString);
}
- (void) dealloc
{
[someCommonString release];
[super release];
}
...
好的,在我分配 myClass 并执行 doTheJob 方法后,我应该在 someCommonString 类属性中有@“一二三四”。我知道这是有效的,但也正在泄漏。 test1、test2 和 test3 是初始化 NSString 的 3 种方式,只有 test2 应该被释放,这是不言自明的,但我更担心将它们作为参数传递给 appendString 方法时会发生什么。因为我知道我有泄漏,但不知道如何处理 1. stringToAdd 参数 [我应该在 appendString 方法中担心它吗?] 2. 结果 -> 如果我自动释放结果,我不知道结果将在什么时候被释放。 3. appendStringMethod 中的sommeCommonString,我应该保留它、释放它还是不理它?
嗯 :)
【问题讨论】:
标签: iphone objective-c