A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jing397 中级黑马   /  2015-10-11 13:29  /  841 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.接口和实现
在OC中定义一个类需要有两个部分:接口和实现。接口文件包含了类的声明,定义了实例变量和方法。实现文件包含了具体的函数的实现代码。下图显示了一个叫 MyClass的类,它继承自NSObject基类。类的定义总是从@interface开始到@end结束。在类名后面的是父类的名称。实例变量被定义 在两个花括号之间。在实例变量下面的是方法的定义。一个分号用来结束一个变量或者方法。





       下面的代码显示了MyClass这个类的实现代码。就像类的定义规则一样,类实现文件也被两个标识框起来,一个是 @implementation,还有一个是@end。这两个指令标识符告诉编译器程序从哪里开始编译到哪里结束。类中的方法名称的定义和它接口文件中的 定义是一样的,除了实现文件中有具体的代码以外。


                    
            @implementation            MyClass
            
            
            -            (id)initWithString:(NSString *) aName
            {
               if            (self = [super init]) {
                   count            count = 0;
                   data            = nil;
                   name            = [aName copy];
                   return            self;
               }
            }
            +            (MyClass *)createMyClassWithString: (NSString *) aName
            {
               return            [[[self alloc] initWithString:aName] autorelease];
            }
            @end
        

        当你要把一个对象保存进变量,要使用指针类型。OC同时支持强和弱变量对象。强类型对象在变量类型定义的时候包含了类名。弱对象使用id类型作为实例变量。下面的例子同时显示了定义MyClass中的强弱两种类型的变量


                    
            MyClass*             myObject1;    // Strong typing
            id                   myObject2;    // Weak typing
        


2.方法
        一个方法定义包含了方法类型,返回类型,一个或者多个关键词,参数类型和参数名。在OC中一个类中的方法有两种类型:实例方法,类方法。实例方法前用(-)号表明,类方法用(+)表明,通过下图可以看到,前面有一个(-)号,说明这是一个实例方法。





        在OC中,调用一个方法相当于传递一个消息,这里的消息指的是方法名和参数。所有的消息的分派都是动态的,这个体现了OC的多态性。消息调用的方式是使用方括号。如下面的例子中,向myArray对象发送insertObject:atIndex:这个消息。


                    
            [myArray            insertObject:anObj atIndex:0];
        

   这种消息传递允许嵌套


                    
            [[myAppObject            getArray] insertObject:[myAppObject getObjectToInsert] atIndex:0];
        


   前面的例子都是把消息传递给实例变量,你也可以把消息传递给类本身。这时要用类方法来替代实例方法 。你可以 把他想象成静态C++类(当然不完全相同)。
类方法的定义只有一个不一样那就是用加号(+)代替减号(-)。下面就是使用一个类方法。


                    
            NSMutableArray*              myArray = nil;    // nil is essentially the same as NULL
            //            Create a new array and assign it to the myArray variable.
            myArray =            [NSMutableArray arrayWithCapacity:0];
        


3.属性
      属性提供了比方法更方便的访问方式。通过property标识符来替代getter和setter方法。使用方法就是在类接口文件中用@property标识符,后面跟着变量的属性,包括 copy, tetain, assign ,readonly , readwrite,nonatomic,然后是变量名。同时在实现文件中用@synthesize标识符来取代getter和setter方法。


                    
            @property            BOOL flag;
            @property            (copy) NSString* nameObject;              
            //            Copy the object during assignment.
            @property            (readonly) UIView* rootView;  // Create only a getter method
        


接口文件中使用@property


                    
            @synthesize            flag,nameObject,rootView;
        


实现文件中使用@synthesize


属性的另一个好处就是,可以使用点(.)语法来访问,如下所示:


                    
            myObject.flag            = YES;
            CGRect              viewFrame = myObject.rootView.frame;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马