Cha*_*sha 2 iphone objective-c ipad
我将从一个例子中解释我的问题.
在.H文件中//
@interface Employee:NSObject{
@private
NSString *name;
}
@property(nonatomic,retain) NSString *name;
Run Code Online (Sandbox Code Playgroud)
在.M文件中//
@implementation{
@synthesize name;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我访问另一个类中的name属性时,myEmp.Name = @"John";
它不会引起任何问题.这是根据封装规则还是我的误解?
您没有破坏封装规则,因为@property(nonatomic,retain) NSString *name;已经表明您要公开getter/setter name.
只有当您直接访问ivar时才会破坏封装,即
myEmp->name = @"John"; // wrong
Run Code Online (Sandbox Code Playgroud)
我认为你误解了@property和@synthesize的用途.它们是定义访问器方法的便捷方式.即.你拥有的相当于: -
- (NSString *)name;
- (void)setName:(NSString *)value;
Run Code Online (Sandbox Code Playgroud)
myEmp.name = @"John" 是语法糖 [myEmp setName:@"John"]
因此,您明确创建了可选的公共访问器方法,然后使用它们.这里没有破坏封装.
| 归档时间: |
|
| 查看次数: |
2110 次 |
| 最近记录: |