问题标签 [nsmutablecopying]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
517 浏览

objective-c - 这是实现 NSMutableCopying 的合理模式吗?

我正在寻找实现NSMutableCopying接口,因为我有一组不可变的对象,但我还需要能够创建修改后的副本。假设我们有一个定义类似这样的电影(当然,真的会有更多的属性):

根据我的阅读,如果您需要在构造函数之外设置 ivars,就像我将在这里实现的那样NSCopying,那么为它们定义私有 setter 是一种很好的做法。所以我最终会得到这样的实现BBMovie(请注意,这些类型并非旨在允许子类化):

现在,鉴于我知道BBMovie实现具有属性的 getter 和 setter,看来我应该能够BBMutableMovie简单地实现:

这种方法有什么问题,和/或我遗漏了什么吗?

当然,我意识到 BBMovie 实现并不是真正不可变的,因为如果库的消费者发送它会响应设置的消息,但这对我来说并不是真正的问题,因为它不会带来安全风险并且会下降在图书馆的“正常”使用之外。

0 投票
2 回答
203 浏览

objective-c - 文字语法与 mutableCopy 和 Objective-C 编译器警告

我对 Python 的经验比其他任何东西都多,所以使用可变数组和不可变数组和字典有点奇怪。我真的很喜欢 Xcode 4.5 添加的文字语法,但是在做一些简单的事情时,我遇到了这样的情况:

并且编译器给了我一个警告,指出“myArray 可能无法响应 addObject”。

代码编译并且 addObject 工作得很好,我可以 NSLog 对象并验证它是否存在于 myArray - 但我不完全理解这个警告的性质。在这种情况下 mutableCopy 不会返回 NSMutableArray 吗?简单地使用 NSMutableArray 而不是尝试(过度)使用文字语法是否更合适?

另外,既然这只是一个愚蠢的警告,我可以忽略它并继续吗?这似乎……在最坏的情况下是懒惰的,也许只是为将来的恶作剧打开了大门。

0 投票
4 回答
501 浏览

iphone - MutableCopy AllocLeak MemoryLeak

我有一个每秒触发一次的 NSTimer。

每一秒我都有一个需要更改的 NSString 。

我以前从未尝试过处理内存管理,所以我不确定我所做的是否正确,但仪器在“alloc”下说stringByReplacingOccurrencesOfString大约一分钟后代码行有 45MB 的“Live Bytes” ...

(并且实时字节数每秒都在增加,最终导致应用程序崩溃)。

我认为我的问题在于MutableCopy代码的某个地方?

这是我的代码:

0 投票
1 回答
1450 浏览

objective-c - 在自定义类上使用 -mutableCopyWithZone: 使其不可变

我创建了一个符合NSCopyingand的自定义类NSMutableCopying

-copyWithZone:我已经为and添加了一个实现-mutableCopyWithZone:,但是每当我调用-mutableCopy我的对象并尝试调用另一个方法时,它就会崩溃,因为一些 ivars 已经变得不可变,即使我调用-mutableCopyWithZone:了 ivars。

这是我复制课程的方式:

(代码在 上失败+flip:,因为它试图在ivar上使用removeObjectAtIndex:和)addObject:NSMutableArray

这是我复制课程的方式:

我不确定它为什么会失败,但我真的不明白为什么它不生成arrayobjects可变。

任何帮助表示赞赏。

0 投票
1 回答
991 浏览

objective-c - mutableCopyWithZone 令人困惑的要求?

澄清:问题不在于可变与不可变,而是关于调用 super 创建正确类的实例。我没有想过[[self class] alloc]在基类中使用,这似乎解决了我的问题。如果没有更好的结果,我会在接下来的几个小时内接受那个分析器:)


苹果规范说:

这很令人困惑。考虑

如果我遵循规范,我只是不明白这段代码怎么可能是正确的。

当调用[super mutableCopyWithZone: zone]返回时,我期望基类只为其自己的 ivars 分配了足够的空间。它无法判断Derived实例需要更多空间来容纳自己的 ivars。

文档的真正含义是什么?我应该如何实现这个?

0 投票
1 回答
6352 浏览

ios - 如何正确实现 mutableCopyWithZone 和 copyWithZone

我读了其他一些关于它的主题,但我仍然迷路了。

我想创建 2 种对象,一种只有“只读”属性的不可变对象,一种只有“读写”属性的可变对象。

让我们称它们为 EXCar 和 EXMutableCar。

EXCar 是 NSObject 的子类,EXMutableCar 是 EXCar 的子类。

ExCar 将在其界面中

EXMutableCar 将在其界面中

因此,当我使用它的子类 EXMutableCar 时,我“打开”了 EXCar 的属性。然后它是可变的。问题是在它们之间正确复制。

我在 EXCar 中实现了 mutableCopyWithZone :

第一个问题,这是做这件事的好方法吗?(我要燕子副本)

问题在于copyWithZone。由于 EXCar 的属性是只读的,我既不能在 EXCar 中创建,也不能在 EXMutableCar 中创建 EXCar 的新实例并像这样填充其属性:

而且我真的不想做一个带有 15 个属性的“init”方法来传递(当然,EXCar 就是一个例子,真正的类充满了许多属性)。通常它们是从服务器的 JSON 消息启动的,因此它们不需要复杂的 init 方法。

第二个问题是这样,如何做一个让我的班级不可变的 copyWithZone ?

谢谢你的帮助 :)

0 投票
1 回答
35 浏览

ipad - 与修改 NSMutablearray 中的值相关的问题

我面临 NSMutablearray 中的值的问题。我有两个 NSMutablearray,两者都使用 mutablecopy 保存相同的内容。问题是当我修改一个数组中的值时,第二个数组中的相应值也会被修改。如何解决这个问题。请帮我。

0 投票
1 回答
213 浏览

objective-c - NSDictionary:MutableCopy 之后的比较

我有以下属性:

//这就是我复制字典的方式:

//在另一个类中我比较它们

我有断点设置。比较字典中的键/值是相同的,但编译器似乎以不同的方式看待它们,因为条件永远不会为真,使其位于大括号内并命中断点。

我通过 NSLog 验证了键/值,它们是相同的。我什至尝试了协议- (id)mutableCopyWithZone:(NSZone *)zone并得到了相同的行为。

NSMutableDicitonary 的 mutableCopy 是否将其副本更改为不更改其任何内容的位置,您将其与源进行比较并且它不一样?我无法弄清楚我做错了什么!

0 投票
1 回答
6579 浏览

ios - 为什么这个 NSMutableAttributedString addAttribute 只有在我使用 mutableCopy 时才有效

我有以下代码:

如您所见,我想将这Son部分加粗。如果我执行上述语句,这不起作用,但只有在我这样做时才起作用:

这可能是什么原因?

0 投票
2 回答
4236 浏览

ios - Objective C 中的可变副本有什么作用

在目标 C 中,与 C++ 语言相同,如果将对象分配给对象,它将获得其指向地址,如下所示:

因此,更改上述对象之一将影响另一个对象。

MutableCopy 也一样吗?复制和 MutableCopy 有什么区别?

如何做深拷贝?