oc 类扩展

来源:互联网 发布:股票收益率数据怎么找 编辑:程序博客网 时间:2024/05/17 20:30

封装的特性就是暴露公共接口给外边调用,C++通过public定义公共方法提供给外面调用,protected和private定义的方法只能在类里面使用,外面不能调用,若外面调用,编译器直接报错,对于变量也同理。OC里面类扩展类似protected和private的作用。

1.类扩展是一种特殊的类别,在定义的时候不需要加名字。下面代码定义了类Things的扩展。

@interface Things ()

{

    NSInteger thing4;

}

@end

2.类扩展作用

1)可以把暴露给外面的可读属性改为读写方便类内部修改。

在.h文件里面声明thing2为只读属性,这样外面就不可以改变thing2的值。

?
1
2
3
4
5
6
7
@interfaceThings : NSObject
  
@property(readonly, assign)NSInteger thing2;
  
- (void)resetAllValues;
  
@end

 在.m里面resetAllValues方法实现中可以改变thing2为300.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@interfaceThings ()
  
{
  
    NSIntegerthing4;
  
}
  
@property(readwrite, assign)NSInteger thing2;
  
@end
  
@implementationThings
  
@synthesizething2;
  
- (void)resetAllValues
  
{
  
    self.thing2 = 300;
  
    thing4 = 5;
  
}

 

2)可以添加任意私有实例变量。比如上面的例子Things扩展添加了NSInteger thing4;这个实例变量只能在Things内部访问,外部无法访问到,因此是私有的。

3)可以任意添加私有属性。你可以在Things扩展中添加@property (assign) NSInteger thing3;

4)你可以添加私有方法。如下代码在Things扩展中声明了方法disInfo方法并在Things实现了它,在resetAllValues调用了disInfo

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@interfaceThings ()
{
    NSIntegerthing4;
}
@property(readwrite, assign)NSInteger thing2;
@property(assign) NSIntegerthing3;
- (void) disInfo;
@end
  
@implementationThings
@synthesizething2;
@synthesizething3;
  
- (void) disInfo
{
    NSLog(@"disInfo");
}
  
- (void)resetAllValues
{
    [selfdisInfo];
    self.thing1 = 200;
    self.thing2 = 300;
    self.thing3 = 400;
    thing4 = 5;
}
0 0
原创粉丝点击