oc基础:区分类方法和实例方法
2013-02-22 15:40
274 查看
转自:http://blog.chinaunix.net/uid-20257772-id-590259.html
如下几点是本文重点描述的:
1. 如何创建一个 object-c(下文简称OC) 类
2. 如何创建一个OC类的对象
3. 类方法 和 实例方法 的不同
4. 如何定义一个实例的方法
5. 如何调用并执行一个实例的方法
创建一个 OC 类需要编写两个部分 @interface 和 @implementation
@interface 专门用于类的描述,描述的内容包括:实例变量的名称和类型,以及实例变量的方法,当然了,在描述“方法”的时候是会指明它的名称,是否具有返回值,是否用到参数等等。例如:
@interface Fraction: NSObject
{
int numerator; //定义实例变量
int denominator; //定义实例变量
}
-(void) print; //定义了名称为print的,一个没有返回值的实例方法
-(void) setNumerator:(int) n;
-(void) setDenominator:(int) d;
@end
Fraction 是我们创建类的名称 Fraction: NSObject 表示Fraction继承了NSObject类。
int numerator; 是定义一个实例变量,它的类型是“整数”
-(void) setNumerator; 是定义一个实例方法,“-”号表示 “实例方法”,如果是“+”则表示类的方法,后面(int)n;表示这个方法用到的参数名称为n,它的类型为整型,void 表示这个方法没有返回值。
那么什么是类的方法,什么又是实例的方法呢?
用一个简单的例子,是最好的解释。假设我们有一个类的名字叫做 Car,我需要创建一个新的对象:myfirstcar,如何来做呢?
myfirstcar = [Car creatCar];
然后我需要为我的车加油,如何来做呢?
[myfirstcar getOil]
其中, creatCar 就是类方法, getOil就是实例方法。由此可见,类方法只能操作“类本身”,或者用来创建一个实例对象,而实例方法则是对实例进行相关的操作。
类的描述部分结束了,我们需要对类描述的方法进行“代码填充”,如果只描述个名称而不给它实际的内容,很显然是没有任何意义的。
@implementation Fraction
-(void)print
{
NSLog(@"%i/%i",numerator, denominator);
}
-(void)setNumerator:(int)n
{
numerator = n;
}
-(void)setDenominator:(int)d
{
denominator = d;
}
@end
看到这里大家基本应该明白了这个类的作用就是打印一个分数,比如 定义分子是1 分母是2 打印出来1/2
没什么意义就是为了解释类的整个创建过程。
我们先前描述的三个方法: print setNumerator setDenominator 在这里被详细的写出了内容代码。
有点类似于函数的定义
@implementation 后面跟的是类名Fraction,可别写错了。
截至到这里,一个完整的类就被定义出来了。那么我们如何使用它呢?
#import
<Foundation/Foundation.h>
int main
(int argc, char
*argv[])
{
NSAutoreleasePool
* pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;
myFraction = [Fraction alloc]; //分配存储空间
myFraction = [myFraction init]; //初始化实例变量 myFraction
[myFraction setNumerator:1]; //调用实例方法
[myFraction setDominator:3];//调用实例方法
[myFraction print]; //调用实例方法
[myFraction release]; //释放存储空间
[pool drain];
return 0;
}
我们首先需要创建一个类的实例 myFraction,然后为myFraction 分配存储空间 myFraction = [Fraction alloc]; 然后初始化 myFraction (包括了实例变量的初始化,实例方法的初始化)myFraction = [myFraction init];
然后我们就可以使用 setNumerator 和 setDominator 以及print 方法了。
因为没有返回值,所以格式就是 [myFraction setNumerator:1]; 表示调用 myFraction 的 setNumerator 方法,setNumerator这个方法执行后将为 numerator 这个实例变量赋值 也就是说 numerator 的值被设定为 1 。
为了将最后的结果打印出来,我们使用了[myFraction print];
这就是一个类从创建到使用的完整过程。
如下几点是本文重点描述的:
1. 如何创建一个 object-c(下文简称OC) 类
2. 如何创建一个OC类的对象
3. 类方法 和 实例方法 的不同
4. 如何定义一个实例的方法
5. 如何调用并执行一个实例的方法
创建一个 OC 类需要编写两个部分 @interface 和 @implementation
@interface 专门用于类的描述,描述的内容包括:实例变量的名称和类型,以及实例变量的方法,当然了,在描述“方法”的时候是会指明它的名称,是否具有返回值,是否用到参数等等。例如:
@interface Fraction: NSObject
{
int numerator; //定义实例变量
int denominator; //定义实例变量
}
-(void) print; //定义了名称为print的,一个没有返回值的实例方法
-(void) setNumerator:(int) n;
-(void) setDenominator:(int) d;
@end
Fraction 是我们创建类的名称 Fraction: NSObject 表示Fraction继承了NSObject类。
int numerator; 是定义一个实例变量,它的类型是“整数”
-(void) setNumerator; 是定义一个实例方法,“-”号表示 “实例方法”,如果是“+”则表示类的方法,后面(int)n;表示这个方法用到的参数名称为n,它的类型为整型,void 表示这个方法没有返回值。
那么什么是类的方法,什么又是实例的方法呢?
用一个简单的例子,是最好的解释。假设我们有一个类的名字叫做 Car,我需要创建一个新的对象:myfirstcar,如何来做呢?
myfirstcar = [Car creatCar];
然后我需要为我的车加油,如何来做呢?
[myfirstcar getOil]
其中, creatCar 就是类方法, getOil就是实例方法。由此可见,类方法只能操作“类本身”,或者用来创建一个实例对象,而实例方法则是对实例进行相关的操作。
类的描述部分结束了,我们需要对类描述的方法进行“代码填充”,如果只描述个名称而不给它实际的内容,很显然是没有任何意义的。
@implementation Fraction
-(void)print
{
NSLog(@"%i/%i",numerator, denominator);
}
-(void)setNumerator:(int)n
{
numerator = n;
}
-(void)setDenominator:(int)d
{
denominator = d;
}
@end
看到这里大家基本应该明白了这个类的作用就是打印一个分数,比如 定义分子是1 分母是2 打印出来1/2
没什么意义就是为了解释类的整个创建过程。
我们先前描述的三个方法: print setNumerator setDenominator 在这里被详细的写出了内容代码。
有点类似于函数的定义
@implementation 后面跟的是类名Fraction,可别写错了。
截至到这里,一个完整的类就被定义出来了。那么我们如何使用它呢?
#import
<Foundation/Foundation.h>
int main
(int argc, char
*argv[])
{
NSAutoreleasePool
* pool = [[NSAutoreleasePool alloc] init];
Fraction *myFraction;
myFraction = [Fraction alloc]; //分配存储空间
myFraction = [myFraction init]; //初始化实例变量 myFraction
[myFraction setNumerator:1]; //调用实例方法
[myFraction setDominator:3];//调用实例方法
[myFraction print]; //调用实例方法
[myFraction release]; //释放存储空间
[pool drain];
return 0;
}
我们首先需要创建一个类的实例 myFraction,然后为myFraction 分配存储空间 myFraction = [Fraction alloc]; 然后初始化 myFraction (包括了实例变量的初始化,实例方法的初始化)myFraction = [myFraction init];
然后我们就可以使用 setNumerator 和 setDominator 以及print 方法了。
因为没有返回值,所以格式就是 [myFraction setNumerator:1]; 表示调用 myFraction 的 setNumerator 方法,setNumerator这个方法执行后将为 numerator 这个实例变量赋值 也就是说 numerator 的值被设定为 1 。
为了将最后的结果打印出来,我们使用了[myFraction print];
这就是一个类从创建到使用的完整过程。
相关文章推荐
- OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏
- OC分类、类方法、实例方法、OC 基础知识及常用的for/in方法
- (OC)基础第二讲:实例变量可见度、方法
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- OC基础——使用category(策略)实现分类,在不改变原类代码的前提下为原类增加方法
- OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏
- 黑马程序员——OC 基础:实例变量修饰符,description方法和多态
- oc面向对象—实例变量以及set get方法
- OC基础DAY05 - 点语法和构造方法
- iOS-OC-基础-NSNumber常用方法
- JS调用OC简单实例-传递一个或者多个参数给oc方法
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
- OC基础8:分类和协议
- iOS开发OC基础:OC中日期类NSDate类的常用方法
- 黑马程序员_OC分类和构造方法
- oc学习笔记-set和get函数 基础(Foundation)面向对象之封装方法
- OC 实例方法和类方法区别
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- 黑马程序员-我的第十一篇学习日记:OC构造方法和分类的使用
- C#验证码识别基础方法实例分析