经常看到一些属性声明为 @property(nonatomic,readonly,retain) UILabel *textLabel __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 可能看起来比较费解,那什么情况下这样用呢?

此方法中的setter方法外部禁止访问,内部可以重定义声明后,在类的内部使用。

示例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// QCar.h
@interface QCar:NSObject {
}
@property (nonatomic, readonly, retain) NSString* carName;

@end

// QCar.m
@interface QCar ()
@property (nonatomic,readwrite,retain) NSString* carName;
-(void)testFunction:(NSString*)carName;
@end


@implememtation QCar
@synthesize carName;

-(void)testFunction:(NSString*)carName {
     self.carName= carName;//OK,编译运行一切ok
}

@end

如果在QCar类的外部调用QCar的方法,编译会报错!