readonly,non-mutable,public和readwrite,mutable,private @property:更多信息?

Col*_*las 5 properties objective-c

我想向NSArray我的用户公开一个(我希望他们只阅读它),但在我的课堂上,我想使用一个NSMutableArray.

我尝试了以下代码,它没有引发任何警告:

// In the .h
@interface MyClass : NSObject <NSApplicationDelegate>

@property (nonatomic, readonly) NSArray * test ;

@end
Run Code Online (Sandbox Code Playgroud)

// In the .m
@interface MyClass ()

@property (nonatomic, strong, readwrite) NSMutableArray * test ;

@end


@implementation MyClass

- (id)init
{
    self = [super init];
    if (self)
    {
        self.test = [[NSMutableArray alloc] init] ;
    }
    return self;
}

@end
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试访问@property test我的类中的from,我可以使用该方法addObject:.所以,我想先前的事情是不可能的.

为什么没有这样的警告?

has*_*ier 0

@property只是语法糖,它会自动为您创建 getter/setter 方法。使用readonly文件中的.h,只会为公众创建 getter 方法,但通过在.m文件中覆盖它,您可以在实现中获得这两种方法。

readwrite是默认值(请参见此处),因此即使省略readwriteput 仍然@property在您的实现文件中,您将获得一个 setter 方法。最好readwrite在您的文件中显式写入 then .m,这样您和其他人就会得到一个提示:该变量在文件中可能只能被声明为只读.h