我是一种新的iOS开发以及堆栈流.so如果有任何问题,我的帖子告诉..我会纠正它们。从字符串中检索特定的文本行..内存管理问题
我想从我有文本格式(.rtf)文件中检索字符串.. 该文件是我的应用程序主束内 其内容是
#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];
代码工作正常,但它留给我的内存管理问题。 如果我释放最后一个注释代码中的变量,应用程序崩溃。
此方法也在我的viewdidload中。 我想要标签改变文本,当用户点击一个按钮..我将不得不再次编写相同的代码在该方法,留下更多的内存问题。
请help..if你有什么更好的建议或如何解决内存问题
感谢您的回答......我已经将路径设为非原子并保留了我的界面中的属性。所有其他的事情都是在这个代码中的初始化..所以,如果从viewdidload剪下这段代码并用它创建一个新函数..如果我向这个函数发送多个调用,将会是任何问题,因为path = [nsbundle ...将被调用一次又一次? – Shubhank
好吧,确保你做self.path = ...在这种情况下。但是一旦你有了这条道路,为什么每次都要再次找到它呢?它不会改变,是吗?当然,这会导致更大的问题,为什么不加载这些单词并在整个应用中使用它们而不是多次解析它们?这些是更大的问题,但我只是想解决内存管理问题。 –
应用程序中会有很多单词...所以我不想一次加载它们..我只是想改变每个按钮单击的标签文本..这就是为什么我使用函数调用来获取下一个词。 – Shubhank