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

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;
}

运行结果如下:









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值