2011-08-18 4 views
2

나는이 방법을 내가 옳은 것처럼 보이지 않는 몇 가지 배열을 다루고있다. 뭔가 alloc 및 init와 관련이 있습니다. 목표 C에서NSMutableArray 초기화 문제

- (void)addBookmark 
{ 
    // Get the user defaults object 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    // Load your bookmarks (editable array) 
    NSMutableArray *bookmarks = [[NSMutableArray alloc]init]; 
    NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"]; 
    if (bookmarksLoaded != nil) { 
     [bookmarks initWithArray:bookmarksLoaded]; 
    } else { 
     [bookmarks init]; 
    } 

    // Add a bookmark 
    NSMutableDictionary *bookmark = [NSMutableDictionary new]; 
    [bookmark setValue:@"value" forKey:@"name"]; 
    [bookmark setValue:@"value" forKey:@"description"]; 
    [bookmark setValue:@"value" forKey:@"code"]; 
    [bookmarks addObject:bookmark]; 

    // Save your (updated) bookmarks 
    [userDefaults setObject:bookmarks forKey:@"bookmarks"]; 
    [userDefaults synchronize]; 

    // Memory cleanup 
    [bookmarks release]; 
} 
+0

그래서, 무슨 일입니까? – Kay

답변

5

맞아 - 그것은 alloc/init을 사용하는 것이다. 당신은 단지 init해야합니다 개체. 당신이 뭔가를 원하는 :

// Load your bookmarks (editable array) 
NSMutableArray *bookmarks = nil; // we'll initialize it later 
NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"]; 
if (bookmarksLoaded) { // shortcut for bookmarksLoaded != nil 
    bookmarks = [[NSMutableArray alloc] initWithArray:bookmarksLoaded]; 
} else { 
    bookmarks = [[NSMutableArray alloc] init]; 
} 

// Add a bookmark 
NSMutableDictionary *bookmark = [NSMutableDictionary dictionary]; 

대신 newdictionary를 사용하는 경우, 당신은 당신이 (new 코코아에서 사용되지 않음)에 대해 걱정할 필요가 없습니다 오토 릴리즈 개체를 가져옵니다. 당신이 가지고있는 것처럼, 당신은 기억을 새고 있습니다.

1
NSMutableArray *bookmarks = [[NSMutableArray alloc]init]; 
NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"]; 
if (bookmarksLoaded != nil) { 
    [bookmarks initWithArray:bookmarksLoaded]; 
} else { 
    [bookmarks init]; 
} 

위의 코드의 문제 것은 당신이 북마크를 INITING되어있다 everywhere..Any 객체는 once..I가

NSMutableArray *bookmarks = nil; 
NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"]; 
if (bookmarksLoaded != nil) { 
    bookmarks   = [[NSMutableArray alloc] initWithArray:bookmarksLoaded]; 
} else { 
    bookmarks  = [[NSMutableArray alloc] init]; 
} 
또한

당신이해야합니다 귀하의 코드를 다시 작성합니다 inited는해야 NSMutableDictionary 북마크는 새로운 것을 통해 생성되므로 릴리스하십시오.

NSMutableDictionary *bookmark = [NSMutableDictionary new]; 
[bookmark setValue:@"value" forKey:@"name"]; 
[bookmark setValue:@"value" forKey:@"description"]; 
[bookmark setValue:@"value" forKey:@"code"]; 
[bookmarks addObject:bookmark]; 
[bookmark release]; 

또한 코드에서 understoo입니다. d. 당신은 아직 iphone에서 메모리 관리를하지 못했다. 성공적인 iOS 개발자가 되려면 먼저 그것을 공부해야한다.