iphone - 将 Obj-C 2.0 属性与可变对象(例如 NSMutableArray)一起使用的最佳方式是什么?

标签 iphone objective-c cocoa macos properties

我有一个具有 NSMutableArray 属性的 Obj-C 2.0 类。如果我使用下面的代码,那么合成的 setter 会给我一个不可变的副本,而不是可变的副本:

@property (readwrite, copy) NSMutableArray *myArray;

Apple 没有实现以下语法有什么原因吗?

@property (readwrite, mutablecopy) NSMutableArray *myArray;

由于我们没有mutablecopy,处理这种(看似常见的)情况的最佳方法是什么?我应该只编写自己的执行 -mutableCopy 的 setter 吗?

最佳答案

我前段时间遇到了同样的问题,发现了一个document on the Apple Developer Connection建议提供您自己的 setter 实现。链接文档中的代码示例:

@interface MyClass : NSObject {
    NSMutableArray *myArray;
}
@property (nonatomic, copy) NSMutableArray *myArray;
@end

@implementation MyClass

@synthesize myArray;

- (void)setMyArray:(NSMutableArray *)newArray {
    if (myArray != newArray) {
        [myArray release];
        myArray = [newArray mutableCopy];
    }
}

关于iphone - 将 Obj-C 2.0 属性与可变对象(例如 NSMutableArray)一起使用的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816720/

相关文章:

iPhone - 像在 iBooks 中一样查看 PDF

ios - 如何使用服务器 URL 和流 key 播放 youtube 视频的实时流

ios - 使用 xibs 在运行时创建 View Controller

ios - 更聪明的边界检测方案-ios

objective-c - NSTextField 在浏览器中打开本地html

iphone - UIPickerView - 选择行太快

iphone - CSS 查询不适用于我的 iPhone 4

iphone - 如何加载预放大的 WebView? (在 Xcode/Objective C 中)

cocoa - 在 Cocoa/C++ 中使用相对路径加载资源

objective-c - 在我的应用程序中放置 'terminal'?