如何将 NSMutableDictionary 作为参考传递?

How to pass NSMutableDictionary as a reference?

我在我的一个 class 中进行了以下设置,我将 NSMutableDictionary 作为参数传递给初始化程序,然后将其分配给变量 controls

我认为行为是将 NSMutableDictonary 的项目复制到 controls,但我需要将其作为参考传递,以便所做的更改反映在 [=21] =] 将字典传递给 MenuViewCell。这总是让我感到困惑,我如何传递 NSMutableDictionary 作为参考?

MenuViewCell.h

@interface MenuViewCell : UITableViewCell
{
    NSMutableDictionary *_controls;
}
@property(nonatomic, copy) NSMutableDictionary *controls;

MenuViewCell.m

@synthesize controls = _controls;

- (id)initWithControls:(NSMutableDictionary *)controls 
{
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    if (self)
    {
        self.controls = controls;
    }
    return self;
}

- (void) setControls:(NSMutableDictionary *)controls
{
    if (_controls != controls)
    {
        _controls = [controls mutableCopy];
    }
}

您的问题是在 属性 中使用了 copy 并在 setter 中使用了 mutableCopy。使 属性 strong.

您也不需要 @synthesize 或显式实例变量。

MenuViewCell.h

@interface MenuViewCell : UITableViewCell

@property(nonatomic, strong) NSMutableDictionary *controls;

MenuViewCell.m

- (id)initWithControls:(NSMutableDictionary *)controls 
{
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    if (self)
    {
        _controls = controls;
    }
    return self;
}

无需覆盖 setter。