在iOS开发中,协议和类别是用的非常多的功能。
协议(delegate):声明一系列的方法,可由任何类实施,即使遵守该协议的类没有共同的超类。协议方法定义了独立于任何特定类的行为。简单的说,协议就是定义了一个接口,其他类负责来实现这些接口。如果你的类实现了一个协议的方法时,则说该类遵循此协议。
协议的申明:
@protocol MyProtocol
@required
-(void) method1;
@optional
-(void)method2;
@end比如tableview继承了UITableViewDelegate协议,这样通过调用指定的tableview的特定方法就能传递那些tableview的通知了,在头文件(.h)文件中,该类采用一个协议,就要将该协议的名称放在尖括号(<……>)中,并且放在它继承的类的名称后面,比如:
@interface MyViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>对于许多委托协议来说,采用一个协议仅仅是实现该协议定义的方法,有些协议要求明确的声明支持该协议,而协议可以指定必须实现方法和可选方法。
类别(category):类别是Objective-C的一项功能,可扩展类的接口,而无需对类进行子类化。category 可以为已经存在的类增加方法,而不需要增加一个子类。而且,我们可以在不知道某个类内部实现的情况下,为该类增加方法。如果我们想增加某个框架(framework)中的类的方法,category 就非常有效。比如,如果想在NSString 上增加一个方法,那么就可以这样做:
@interface NSString (extension)
-(void) method;
@endcategoty没有父类,类后面的括号里写类别的名字。
@implementation NSString(extension)  
-(void) method{
     ……
}
@end这个时候就可以在NSString类的对象上调用这个方法了。
注意:类别并不能为类声明新的实例变量,他只包含方法。然而在类作用域内所有实例变量,都能被这些类别访问。他们包括为类声明的所有的实例变量,甚至那些被@private 修饰的变量。可以为一个类添加多个类别,但每个类别名必须不同,而且每个类别都必须声明并实现一套不同的方法。
要记住,我们通过 category 来修改一个类的时候,他对应应用程序里这个类所有对象都起作用。跟子类不一样,category 不能增加成员变量。我们还可以用 category里重写类原先存在的方法(但是并不推荐这么做)。
可以将类别作为一种手段,对头文件中的相关方法声明进行分组,甚至还可以将不同的类别声明放在不同的头文件中,框架在其所有的头文件中使用这些技巧达到清晰明确的效果,还可以使用称为类别扩展的匿名类别,在实现文件(.m)文件中声明专有的属性和专有的方法,类扩展看起来类似于类别,只是圆括号之间没有文本。
 iOS开发之协议与类别
iOS开发之协议与类别
         
                   
                   
                   
                   
                            
 
                             本文介绍了iOS开发中协议和类别的概念及用途。协议定义了一组方法供其他类实现,用于对象间通信;类别则允许扩展现有类的功能而不需创建子类。
本文介绍了iOS开发中协议和类别的概念及用途。协议定义了一组方法供其他类实现,用于对象间通信;类别则允许扩展现有类的功能而不需创建子类。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   776
					776
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            