【发布时间】:2012-05-05 03:46:36
【问题描述】:
我正在尝试删除 NSMutableArray 中指向另一个数组中的对象的指针,而不删除对象本身。例如:
// In ViewController.m – Code abridged and somewhat simplified
@interface ViewController ()
@property (nonatomic, strong) NSMutableArray *objectPool;
@property (nonatomic, strong) NSMutableArray *objectsOwnedByFriend;
@property (nonatomic, strong) NSMutableArray *objectsOwnedByMe;
- (void)transferPointerToObjectFromFriendToMe;
- (void)copyPointerToObjectFromFriendToMe;
@end
@implementation ViewController
@synthesize objectPool = _objectPool;
@synthesize objectsOwnedByFriend = _objectsOwnedByFriend;
@synthesize objectsOwnedByMe = _objectsOwnedByMe;
- (void)setObjectPool:(NSMutableArray *)objectPool
{
_objectPool = objectPool;
}
- (NSMutableArray *)objectPool
{
if (!_objectPool) _objectPool = [[NSMutableArray alloc] initWithArray:self.objects]; // self.objects is a mutable array containing multiple NSObjects
return _objectPool;
}
- (void)setObjectsOwnedByFriend:(NSMutableArray *)objectsOwnedByFriend
{
_objectsOwnedByFriend = objectsOwnedByFriend;
}
- (NSMutableArray *)objectsOwnedByFriend
{
if (!_objectsOwnedByFriend)
{
_objectsOwnedByFriend = [[NSMutableArray alloc] init];
[_objectsOwnedByFriend addObjectsFromArray:self.objectPool];
}
return _objectsOwnedByFriend;
}
- (void)setObjectsOwnedByMe:(NSMutableArray *)objectsOwnedByMe
{
_objectsOwnedByMe = objectsOwnedByMe;
}
- (NSMutableArray *)objectsOwnedByMe
{
if (!_objectsOwnedByMe) _objectsOwnedByMe = [[NSMutableArray alloc] init];
return _objectsOwnedByMe;
}
- (void)transferPointerToObjectFromFriendToMe
{
[self.objectsOwnedByMe addObject:[self.objectsOwnedByFriend lastObject]];
[self.objectsOwnedByFriend removeLastObject];
}
- (void)copyPointerToObjectFromFriendToMe
{
[self.objectsOwnedByMe addObject:[self.objectsOwnedByFriend lastObject]];
}
@end
在上面的代码中,当我使用 transferPointerToObjectFromFriendToMe 时,删除最后一个对象会同时删除 self.objectsOwnedByFriend 中指向它的指针(如我所愿)以及 self.objectPool 中的对象本身(我不这样做) 希望发生)。
我想要的是一个包含所有实际对象的数组 (self.objectPool),然后是两个可变数组 (self.objectsOwnedByFriend 和 self.objectsOwnedByMe),其中包含指向 self.objectPool 中对象的指针以及添加的能力并删除更多将 self.objectPool 中的对象引用到 self.objectsOwnedByFriend 和 self.objectsOwnedByMe 的指针。
另外,当我使用 transferPointerToObjectFromFriendToMe 或 copyPointerToObjectFromFriendToMe 时,似乎没有正确添加对象,因为通过 self.objectsOwnedByMe.count 进行的后续检查导致 0 而不是 1。
解决方案 = 我的原始代码中缺少 self.objectsOwnedByMe 的惰性实例化:S
我能够检查 self.objectsOwnedByMe 是否通过以下方式正确创建:
NSLog(@"self.objectsOwnedByMe = %@", self.objectsOwnedByMe);
** 我的第一个 StackOverflow 问题! ** 我希望我很清楚......找不到类似的问题,如果我错过了一个旧线程,我们深表歉意。如果您需要更多信息来诊断,请告诉我。 (我正在努力学习 Obj-C。)
【问题讨论】:
-
您应该实际提交一个答案并将该答案标记为选中,而不是编辑您的原始问题以包含解决方案。从搜索来自谷歌的答案的人的角度来考虑它。他们喜欢找到已被接受的正确提出的问题和答案。
-
顺便说一句,欢迎光临,希望您过得愉快
-
现在我看到...隐藏在页面底部!谢谢。
标签: objective-c pointers nsmutablearray