2 cocoa-touch objective-c nsmutablearray nsarray ios
我有这个方法处理一些我似乎无法正确的数组.与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];
}
Run Code Online (Sandbox Code Playgroud)
你是对的 - 这是你对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];
Run Code Online (Sandbox Code Playgroud)
如果你使用dictionary而不是new,你得到一个你不必担心的自动释放对象(new不在Cocoa中使用).就像你拥有它一样,你正在泄露记忆.
| 归档时间: |
|
| 查看次数: |
7287 次 |
| 最近记录: |