object-c的分类和扩展 eg:@interface ViewController()这句话什么意思

参考:

http://www.cnblogs.com/AbeDay/p/5026951.html

http://blog.csdn.net/lushuner/article/details/48371623

 


分类实例讲解:

分类介绍:

概念:Category  分类是OC特有的语言,依赖于类。

分类的作用:在不改变原来的类内容的基础上,为类增加一些方法。

下面展示了一个分类的创建:
转载自:http://www.cnblogs.com/wendingding/p/3709569.html
object-c的分类和扩展 eg:@interface ViewController()这句话什么意思_第1张图片
object-c的分类和扩展 eg:@interface ViewController()这句话什么意思_第2张图片
object-c的分类和扩展 eg:@interface ViewController()这句话什么意思_第3张图片
上面展示了一个分类的创建。

分类的使用注意:

1分类只能增加方法(包括类方法和对象方法),不能增加成员变量

2)在分类方法的实现中可以访问原来类中的成员变量;

3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);

4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;

5)在很多的情况下,往往是给系统自带的类添加分类,如NSObjectNSString,因为有的时候,系统类可能并不能满足我们的要求。

6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。




类扩展:

类扩展是分类的一个特例。 
Extension是Category的一个特例。 
起名字为匿名,并且添加的方法一定要实现。(category可以不实现)。因此又叫匿名分类。可以为一个类添加额外的变量,方法或者合成属性。 
我的理解: 
延展就是为类一开始设计没有考虑到的情况增加新的属性方法来弥补。延展的实现如下:

示例代码

Person.h#import @interface Person : NSObject

- (void)testRun;
@end
Person_work.h#import "Person.h"@interface Person ()
{
    int _height;
}
- (void)run;
- (void)work;
@end

Person.m#import "Person.h"#import "Person_work.h"@interface Person()

{
    int _age;
}
- (void)run;
@end@implementation Person
- (void)work{
    NSLog(@"%d",_age);
    NSLog(@"working。。。");
    NSLog(@"height is :%d",_height);
}
- (void)run{
    NSLog(@"running ....");
    NSLog(@"%d",_age);
}
- (void)testRun{
    [self run];
    NSLog(@"height is :%d",_height);
}
@end
  • 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
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

有以下方法实现类扩展: 
1. 直接在Person.m文件中用 @interface Person()的方法,然后在类本身的@implementation中去实现扩展的方法; 
2. 新建Objective-C文件work,选择Extension,扩展的原类为Person,然后生成Person_work.h头文件,在头文件中扩展属性和方法,同样需要在原类的.m文件中区实现。


比如:

@interface ViewController : UIViewController 这个是继承

@interface ViewController()这个是类别

因为没有给名字,所以可以叫做匿名类别,他允许你定义消息,属性,变量和方法

匿名类别的主要作用是一些属性和方法你只想在类内部使用,不需要暴露给外部类引用头文件时被看到,就可以用匿名类别来定义.

比较常用的是在私下遵守一些协议,不需要暴露在公共头文件中.

将 属性 方法 写在 @interface ViewController : UIViewController

引用这个文件时,就可直接已访问这些内容

而 将 将 属性 方法 写在 @interface ViewController()

引用这个文件时,不能直接调出来.直接使用





你可能感兴趣的:(ios开发)