我是一種新的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