objective-c类以及方法调用的基本总结

来源:互联网 发布:西瓜影音播放器mac版 编辑:程序博客网 时间:2024/05/17 01:28

1 类是对象的类型,对象是类的实例

2   成员变量,用来区分同一个类的不同对象。(描述对象的)

    静态成员:描述整个类的特征。(描述类的)

    非静态成员变量:描述不同对象的特征(描述对象用的)

    成员变量可以是各种类型:简单类型、指针、引用、复合类型、其他类

    常量成员:必须在创建一个对象的时候,初始化它的常量成员,且常量成员的值不能改变。

3  成员函数:用来描述一个类对象的函数,叫成员函数。

   静态成员函数:属于整个类的成员函数。

   把类的数据成员对外隐藏,使之从外部不可见,称为信息隐藏。

   成员函数是给外部访问的接口。

4 一般来说,成员变量是私有的,成员函数为公有的

   外部只能通过公有的成员函数才能访问对象,则把对象的私有数据保护起来。这种方式就是封装。

5  objective-c与c++的区别是:

(1)在C++中使用.h作为头文件的后缀名,使用.cpp作为实现文件的后缀名。而ObjC中虽然也是用.h作为头文件的后缀名,但是却使用.m作为实现文件的后缀名。

(2)在c语言或C++中,用#include包含头文件 为了防止头文件被重复包含,需要使用头文件预处理防止头文件的重复包含,而Objc使用#import本身就有防止头文件被重复包含的功能。

6.  (1)在C++中使用关键字class声明类,在{}内声明成员变量与成员函数,并用分号“;”作为类声明的结束标志,在实现文件中绑定符“::”将类名与自己实现的成员函数进行绑定。而在objective-c在.h文件中使用@interface关键字声明类,在{}内声明成员变量(只能是非静态成员变量,即实例变量),以@end作为类声明的就结束标志。在{}之后@end之前声明成员函数(包括类方法和实例方法也就是静态方法与非静态方法)和类变量。格式如下:

    @interface  className:parent<protocol,>

{

    //实例变量的声明

}

  method declaration//方法声明  包括静态方法与非静态方法

 Type  type;   //定义静态变量  即类变量

 @property  (属性参数1,属性参数2,,) 数据类型 1    数据名1,数据类型2  数据名2......;

 @end

(2)objective-c使用@implementation作为.m文件中类实现的开头标志,以@end作为结束标志,格式如下:

@implementation  className  //类代码的开始

@synthesized propertName;

methodDefinition //方法的实现

@end

7 .注意:在oC中默认的成员变量时protected保护类型的(类成员与所有函数都是公有的),如果想在main函数就是在外部访问,要么通过调用getter方法实现,要么将其声明为公有的  即在实例成员变量前面加@public即可。

8  OC定义了一个根类:NSObject,每一个新建的OC类都应该为NSObject的派生类。NSObject为运行时系统提供了大量的方法。

9 方法声明的一般格式是:

(mtype)(returnType)name1:(Type1)param1   name2:(Type2)param2..............

mtype:方法类型(+或者-)retuenType:返回值类型   type1和type2:参数类型    param1和param2:参数名称    name1和name2等:标签名

注意:每一个参数前要有一个标签名并用“:”隔开,前一部分与后一部分用空格隔开。

  •  在OC中,当方法需要参数时,方法名前要加冒号,冒号前面的标示符为标签名,所有的标签名和冒号构成了整个方法的方法名,即冒号也是方法名的一部分。即方法名为标签名1:标签名2:标签名3:,,,,,
  • 类的方法有两种:类方法和实例方法(就是静态方法与非静态方法),如果mtype为+,表示的是类方法(静态方法),如果为-表示的是实例方法(对象方法)
10  id:可以代替所有对象的指针,经常作为类的初始化方法的返回值类型,注意:无论什么方法,mtype(+/-)都必不可少。初始化变量的方法常常用id作为方法的返回值类型,用self(即自身指针,相当于this)作为返回值类型,并经常在如下方法体内,实现初始化内容,格式如下:

-(id)标签1:(type1)参数1   标签2:(type2)参数2......

             if(self=[super init])

      {

           //进行类对象成员的初始化赋值

      }

   return self;

}

 解释如下:super即父类指针,self=[super init]是一个赋值语句,如果赋值成功则self为真,说明初始化父类的成员成功。与C++相同,就是调用父类的初始化成员变量(父类构造函数)的方法对从父类继承而来的变量或方法进行赋值初始化

11  类对象的建立格式如下:

类名 *p1  =[[类名 alloc] init];然后再调用初始化方法进行成员变量的初始化

[p1  标签1:实参值1  标签2:实参值2  ..........标签n:实参值n]   或者是

类名  *p1=[[类名 alloc] 标签1:实参值1  标签2:实参值2  ..........标签n:实参值n];在定义的同时进行初始化

12  OC调用方法的格式如下: [类指针名  方法名]或[类指针名  标签1:实参1   标签2:实参2......  标签n:实参n]

或者是(*类指针名).公有方法名  也可以是: 类指针->公有成员

特别注意:因为OC中成员变量默认是保护的,要想在外部不调用setter和getter方法直接访问,除非在类定义成员的前面加上@public 。其次常见这种格式:类指针.成员变量=值;或输出“类指针.成员变量” 看似好像是直接利用对象来调用成员来进行赋值或输出,其实在调用成员变量的setter与getter方法。如果没有为成员变量定义实现setter与getter方法  且没有用@property让系统自动生成setter与getter方法就直接用“  类指针.成员变量”来进行访问与赋值的话就会造成错误。

 代码验证如下:

13 NSObject的初始化即构造函数是-(id)init 析构函数名为-(void)dealloc; 所以当手动的类重写根类的这两个方法时,不用再声明。切记:

(1)初始化函数返回类型是id,返回self,且初始化语句必须写在if(self=[super init]){ } 判断语句中;

(2)重写dealloc的话必须要有[super dealloc];

13、任何类OC类(必须继承NSObject),都可以重写-(NSString *)description方法,相当于Java中的toString()方法,返回NSString *,即用%@输出对象指针时,系统会自动调用重写的description.。

在Circle.h文件中编辑代码如下

////  Circle.h//  Test2////  Created by apple on 15/8/8.//  Copyright (c) 2015年 liu. All rights reserved.//#import <Foundation/Foundation.h>@interface Circle : NSObject{@public     int x;//实例变量的声明,相当于成员变量    int y;    int radius;}-(id)initWithX:(int) _x  andY:(int) _y  andRad:(int) _r;-(void)setX:(int)_x;-(int)x;-(int)y;-(void)setR:(int)_r  andX:(int)_x  andY:(int) _y;-(void)print;+(int)allNum;@end
在Circle.m中编辑代码如下:

////  Circle.m//  Test2////  Created by apple on 15/8/8.//  Copyright (c) 2015年 liu. All rights reserved.//#import "Circle.h"@implementation Circle- (id)initWithX:(int)_x   andY:(int)_y  andRad:(int)_r{    if(self=[super init])  //意思是调用父类的部分    {        x=_x;        y=_y;        radius=_r;    }    return self;}int sum;-(int)r{    NSLog(@"返回成员变量radius");    return radius;}-(void)setX:(int)_x{    NSLog(@"调用x的setter方法赋值");    x=_x;}-(int)x{    NSLog(@"返回成员变量x");    return x;}-(int)y{    NSLog(@"返回成员变量y");    return y;}-(void)print{    NSLog(@"Radius :%d  X:%d  Y:%d",radius,x,y);}-(void)setR:(int)_r  andX:(int)_x   andY:(int)_y{    radius=_r;    x=_x;    y=_y;}+(int)allNum{    return sum;    }@end

在main.m中编辑代码如下:

#import <Foundation/Foundation.h>#import "Circle.h"int main(int argc, const char * argv[]){    @autoreleasepool {        Circle *c=[[Circle alloc] init];        [c setR:3 andX:4 andY:5];        [c print];                [c setX:23];        printf("[c x]=%d c.x=%d c->x=%d\n",[c x],c.x,c->x);        NSLog(@"%d",[Circle allNum]);        c->radius=2;       [c release];    }    return 0;}

运行结果如下:









0 0
原创粉丝点击