objective-c - 在 Objective-C 中声明我类的代表持有的对象的所有权

标签 objective-c ios automatic-ref-counting

我对我的委托(delegate)创建的 ALAsset 的所有权有疑问。我的代理是模态视图,当它被关闭时,它返回一个 ALAsset,但 Assets 需要比代理长。
在委托(delegate)回调中,我简单地获取 ALAsset 并将其放在一个 NSMutableArray 中,该数组由我的应用程序的控制单例 [OrderManager sharedOrderManager]

-(void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingPictureWithAsset:(ALAsset *)asset    
{
    [[[[OrderManager sharedOrderManager] currentOrder] assets] addObject:asset];
}

稍后,(委托(delegate)被解散后)我使用数组中的 Assets 构建了一个 TableView

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Photos View Cell Identifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UIButton *imageButton;
    imageButton = (UIButton *)[cell.contentView viewWithTag:kImageButton_TAG];
    ALAsset *imageAsset = [[[[OrderManager sharedOrderManager] currentOrder] assets] objectAtIndex:indexPath.section];
    [imageButton setImage:[UIImage imageWithCGImage:[asset aspectRatioThumbnail]] forState:UIControlStateNormal];
    return cell;
}

当然,由于委托(delegate)不再存在,委托(delegate)是 Assets 的所有者,*imageAsset 现在是一个 nil 指针。 我的问题是,如何使我的 TableView Controller 或我的 sharedOrderManager 成为 ALAsset 的所有者?

编辑:澄清一下,我使用的是 ARC。

最佳答案

检查 assets 返回的 NSMutableArray* 是否已初始化(可能在单例实现或在它之后调用的任何其他方法)。

看起来它是 nil 而不是 addObject: 也不是 objectAtIndex: 可以返回任何东西。 NSMutableArray 保留添加的对象,在您自己过度释放它们之前不应释放它们。

关于objective-c - 在 Objective-C 中声明我类的代表持有的对象的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652524/

相关文章:

iphone - AVFoundation 缓冲区与已保存图像的比较

ios - 使平移手势需要所有 4 个滑动手势都失败

automatic-ref-counting - 如何启用/禁用 “Automatic Reference Counting”?

iphone - 我需要在 ARC 中使用 dealloc 方法吗?

ios - 如何查看我的 iPhone/iPad 中安装的其他应用程序的启动次数?

ios - 从UITableView删除多行

ios - 如何将完整数据写入 UIImage 到 NSOutputStream

ios - 导出屏幕截图 UIAutomation

ios - 如何在 UITableView 中找到完全可见(完全可见)单元格的索引

ios - 在 Swift 中如何知道该结构已从内存中删除?