从string检索特定的文本行。内存pipe理问题

我是一种新的iOS开发以及堆栈溢出。如果有任何问题,我的post告诉..我会纠正他们。

我想从我的文本(.rtf)文件检索string..该文件是在我的应用程序主包内容是

#start word1 First word end word2 Second word end //lots of things to be added later 

码:

  path = [[NSBundle mainBundle]pathForResource:@"words" ofType:@"rtf"]; if(path) { NSLog(@"path exists"); } NSError *error = nil; NSString *file = [[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if(error) { NSLog(@"error"); } NSString *finalword= [[NSString alloc]init ]; NSString *startfrom = [[NSString alloc] initWithFormat:@"word%i",i+1]; i++; NSLog(@"%@",startfrom); NSString *wordoftheday = [[NSString alloc]init ]; NSScanner *scanner = [NSScanner scannerWithString:file]; [scanner scanUpToString:startfrom intoString:nil]; [scanner scanUpToString:@"end" intoString:&wordoftheday]; finalword = [wordoftheday substringFromIndex:[startfrom length]]; NSLog(@"%@",finalword); Word.text = final word; //change label text //[final word release]; //[wordoftheday release]; //[file release]; 

代码工作正常,但它留给我的内存pipe理问题。 应用程序崩溃,如果我释放最后注释的代码中的variables。

也是这个方法是在我的viewdidload。 我想要标签来改变文本,当用户点击一个button..我将不得不再次编写相同的代码在那个方法留给我更多的内存问题。

请帮助..如果您有更好的build议或如何解决内存问题

所以,一个接一个地看看,关注记忆问题,而不是这里的整体策略:

NSString *finalword= [[NSString alloc]init ];

在这里你分配/初始化一个新的不可变且空的NSString,然后你最终覆盖指针。 你应该删除这一行。 然后,您需要将声明向下移动几行:

NSString *finalword = [wordoftheday substringFromIndex:[startfrom length]];

那么你有:

NSString *startfrom = [[NSString alloc] initWithFormat:@"word%i",i+1];

这个你需要稍后发布。 或者把它改成:

NSString *startfrom = [NSString stringWithFormat:@"word%i",i+1];

那么你有:

NSString *wordoftheday = [[NSString alloc]init ];

同引言一样 除了你需要定义这个variables,所以你可以把它传递给扫描仪。 所以把它改为:

NSString *wordoftheday = nil;

最后,你可以释放'文件'。 没事儿。 但是你不想发布'wordoftheday'或'finalword',因为你不拥有这些string。 你没有自己创造它们。

还有一个说明:

if(error)

这不是加载“文件”时检查错误的正确方法。 你应该检查方法的返回值,并且当且仅当返回值为零时才查找错误。 所以把这一行改为:

if(!file)

(好吧,这不是真正的记忆问题,但是我注意到了一个错误。)

我认为这至less就内存问题而言。 我希望有帮助。

将这些variables作为成员variables并在dealloc中释放