相关疑难解决方法(0)

如何在头文件(.h)中创建一个不可变的readonly属性,一个实现的可变读写属性(.m)

我有一个包含字典的对象JSONData.从头文件,以及将访问它的其他类,我希望此属性只是只读和不可变.

@interface MyObject : NSObject

@property (readonly, strong, nonatomic) NSDictionary *JSONData;

@end
Run Code Online (Sandbox Code Playgroud)

但是,我需要它readwrite和实现文件一样可变,就像这样,但这不起作用:

@interface MyObject ()

@property (readwrite, strong, nonatomic) NSMutableDictionary *JSONData;

@end

@implementation MyObject

// Do read/write stuff here.

@end
Run Code Online (Sandbox Code Playgroud)

我有什么办法可以强制执行我想要的那种抽象吗?我看了看其他的问题,虽然我已经知道如何使财产readonly.hreadwrite.m,我无法找到有关的可变性存在的差异.

iphone cocoa cocoa-touch objective-c ios

4
推荐指数
1
解决办法
1318
查看次数

使用MRC的可变ivar的不可变特性

今天我接受采访时被问到一个问题:

手动生成二传手和吸气剂,使用手动参考计数进行适当的声明:

@interface SomeClass : NSObject 
{
     NSMutableArray* _array; 
}
@property (copy) NSArray* array;

@end
Run Code Online (Sandbox Code Playgroud)

我的回答是:

- (NSArray *)array 
{
     @syncronized (self)
     {
         return [_array copy];
     }  
}

- (void)setArray:(NSArray *)array 
{    
    @synchronized (self)    
    {    
      if (_array != array)
      {
         [_array release];
         _array = [array mutableCopy];
         [_array retain]
      }    
    } 
}
Run Code Online (Sandbox Code Playgroud)

我从未使用过MRC,所以不确定答案的正确性.请帮我修改这段代码并附上说明!

objective-c

1
推荐指数
1
解决办法
602
查看次数

标签 统计

objective-c ×2

cocoa ×1

cocoa-touch ×1

ios ×1

iphone ×1