我最近開始使用iOS編程(與來自iTunes U的Stanford CS193P講座)。我被困在家庭作業中,那個可怕的計算器目前對我來說有點太難了,所以我開始編寫一些非常簡單的應用程序來習慣Objective-C中的語法和數據結構。初學者iOS應用程序的改進
我寫了一個小應用程序,它有兩個按鈕。一個'初始化'一個數組,並填充兩個UILabels與a)第一個對象(objectAtIndex:0
)和b)count
。然後我有一個按鈕,它允許我循環訪問數組..當我單擊時顯示下一個對象,當然,當我到達數組的末尾時,將返回到第一個對象。
這很簡單。我知道。但是,唉,我沒有像斯坦福大學的學生那樣得到任何反饋,看書也沒有讓我感覺好。所以我想問一些反饋和可能的代碼改進,最佳實踐等等。
我用一種方法創建了一個模型,它創建了一個項目列表。然後我發送retain
給它,因爲沒有它我得到了EXC_BAD_ACCESS
問題;所以在這裏我的第一個問題:這是好嗎? :)起初我並不認爲我必須保留它,但當我確實保留它時,我仍然不完全明白它爲什麼起作用。或者以某種方式返回並將其「捕獲」到控制器中會更好?我真的不確定這裏'好'的方式。
-(void)populateItemsList
{
itemsList = [NSArray arrayWithObjects:@"Test", @"Test2", @"test3", nil];
[itemsList retain];
}
開,在我的控制器接下來的一段代碼:
我懶洋洋地在這裏實例化了我的模型,因爲我學會了如何從斯坦福大學計算機分配做到這一點。我想這樣做可以嗎?我明白這樣,模型的內存直到實際需要時纔會使用?
- (DisplayerModel *)model
{
if(!displayerModel)
{
displayerModel = [[DisplayerModel alloc] init];
}
return displayerModel;
}
我然後必須「創造」陣列和填充我出口(2個UILabels,如前所述)的方法。
- (IBAction)createArray:(UIButton *)sender
{
[[self model] populateItemsList];
arrayCount = [[[self model] itemsList] count];
stepper = 0;
NSString *firstObject = [[[self model] itemsList] objectAtIndex:stepper];
countDisplay.text = [NSString stringWithFormat:@"%d", arrayCount];
display.text = [NSString stringWithFormat:@"%@", firstObject];
}
我老實說不知道這段代碼。它可能只是我,因爲我不太習慣在Objective-C中編寫代碼;我可以在這裏改進嗎?我特別關心整個stepper
的想法。我正在尋找像currentIndex
或類似的東西,但我似乎無法在文檔中找到它..這就是爲什麼我創建了步進變量來跟蹤我在數組中的位置。
然後終於,這讓我循環的方法:
- (IBAction)showNextValue:(UIButton *)sender
{
if (stepper == arrayCount - 1) {
stepper = 0;
}
else {
stepper ++;
}
display.text = [NSString stringWithFormat:@"%@", [[[self model] itemsList] objectAtIndex:stepper]];
}
我不會把我的dealloc
或viewDidUnload
覆蓋這裏是因爲好..我測試了泄漏這個應用程序,它似乎並不泄漏任何內存。還有其他方法來測試這個嗎?構建和分析也不會報告任何問題。是否還有其他缺陷需要注意?
感謝任何願意查看我的代碼並向我提供一些建議等的人仍在學習!
所以如果我理解正確的話,我用'[array]'完成的方式,對象是自動釋放的,因爲我一開始並沒有保留它?我懂了;現在有道理:) – cabaret