ios - NSMutableArray Init 的麻烦

标签 ios objective-c cocoa-touch nsmutablearray nsarray

我有这个方法来处理几个我似乎无法正确处理的数组。与alloc和init相关的东西。

- (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];
}

最佳答案

你是对的 - 这是你对 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];

如果您使用dictionary而不是new,您将获得一个无需担心的自动释放对象(new不是' t 用于 cocoa )。正如你所拥有的那样,你正在泄漏内存。

关于ios - NSMutableArray Init 的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7103154/

相关文章:

iphone - 为什么我不能更改 UIBarButtonItem 的标题?

ios - WKWebView 不尊重宽度=设备宽度

objective-c - Cocoa - 改变 XML 节点的值

ios - 更改后如何使 UIAlertView 调用 `alertViewShouldEnableFirstOtherButton:`?

ios - 使用 NSLayoutManager 创建动画文字效果?

objective-c - 如何创建 NSNotification

objective-c - self.var 和简单 var 的区别

iphone - iOS 无法在设备旋转时自动调整 subview 的大小

iphone - UIViewController 的两种方式关系

ios - 如何使用 Open CV 检测打哈欠