您的位置:首页 > 移动开发 > Objective-C

[玩玩Objective-C]之类和对象

2015-06-20 09:14 399 查看
前些日子买了台MacBook Air ,用了一段时间之后发现没什么好玩的,于是乎,程序猿的天性使然,我就想在Mac上写点小程序玩玩,然后就在网上买了两本书来研究,觉得有所收获后,就写成博客分享给大家。OC其实很简单,只是比起传统的类C的面向对象语言,如Java,C#等,语法确实有些奇怪。转载请注明出处:朱登凯的专栏 http://blog.csdn.net/daguanjia11

本篇文章和大家一起学习如何编写一个Objective-C的类。

首先,一个OC类包含两部分,@interface部分和 @implementation部分。@interface部分声明一些属性和方法,方法只给出了参数列表和返回值,不提供实现,而@implementation部分会实现@interface部分声明的方法。下面我们来动手写吧。

用Xcode创建类

首先,打开Xcode,新建一个CommandLine项目,然后在Project Navigator中右击项目文件,点[new file]菜单,然后在弹出的文件模版对话框中,左侧列表中选中OS X,右侧选择Cocoa Class ,–>next , 输入类名Person(或者输入别的名字),回车,回车,Xcode会帮我们新建两个文件,Person.h和Person.m。Person.h是头文件,就是所谓的@interface部分,Person.m是实现文件,就是所谓的@implementation部分。下面是代码模版生成的代码

Person.h

#import <Foundation/Foundation.h>
@interface Person : NSObject

@end


Person.m

#import "Person.h"
@implementation Person

@end


加入属性和方法

接下来,我在新建的这两个文件中加入一些属性和方法,修改后的代码如下:

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

//定义两个属性
@property int age;
@property NSString* name;

//打招呼
-(void) sayHello;

//吃东西
-(void) eatFood:(NSString*) foodName;

//获取身高
-(int) getAge;

//设置姓名和年龄
-(void) setName:(NSString *)name andAge:(int) age;

@end


Person.m

#import "Person.h"

@implementation Person

//打招呼
-(void) sayHello
{
NSLog(@"hello,my name is %@",self.name);
}

//吃东西
-(void) eatFood:(NSString*) foodName
{
NSLog(@"爱吃 %@",foodName);
}

//获取身高
-(int) getAge
{
return self.age;
}

//设置姓名和年龄
-(void) setName:(NSString *)name andAge:(int) age
{
self.name=name;
self.age=age;
}

@end


这个是Main函数

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
Person* person=[[Person alloc]init];

//调用带多个参数的方法
[person setName:@"张三" andAge:18];

//调用方法
[person sayHello];

//调用有一个参数的方法
[person eatFood:@"烧大肠"];

//调用有返回值的方法
int age=[person getAge];
NSLog(@"我今年%i岁",age);
}
return 0;
}


下面是运行后的输出结果

2015-06-20 10:24:49.965 ClassDemo[1937:266098] hello,my name is 张三

2015-06-20 10:24:49.966 ClassDemo[1937:266098] 爱吃 烧大肠

2015-06-20 10:24:49.967 ClassDemo[1937:266098] 我今年18岁

对代码的解释和补充

下面对上面的代码做些必要的讲解,如果你对OC一无所知,有必要看看。我想到哪儿就说到哪儿,不是很有条理。

@property命令用来声明属性(如@property NSString* name;)。

NSString是Foundation框架中定义的类,用于处理字符串对象。由于NSString是引用类型,所以,声明NSString对象时,要加上*号。NSString对象也可以是一个字符串常量,字符串常量用@开头,如:
NSString* str= @"this is a string";


下面说一下Objective-C中如何定义一个方法。以下面这两个方法为例

-(void) eatFood:(NSString*) foodName;
-(void) setName:(NSString *)name andAge:(int) age


开头的减号说明该方法是一个实例方法,(加号表示类方法)。减号后面的括号中是该方法的返回值类型,如果什么都不返回,则写void。eatFood和setName是方法名,如果方法接收参数的话,需要在冒号后面添加参数,一个冒号加一个参数。有人会问了,andAge是什么鬼?哈哈,我也说不清楚。。。你可以这么理解,这个方法的签名是 ,setName:(NSString*) andAge:(int),所以,当你看到这个签名的时候,你就知道要给这个方法传递什么参数了。那参数名name和age是用来干啥的?形参而已,表管他!

下面说方法的调用,如下面的代码

[person setName:@"张三" andAge:18];
[person sayHello];
[person eatFood:@"烧大肠"];


调用方法,在OC的世界,叫做给对象发送消息,参数总是跟冒号结合在一起的。最奇葩的是,方法调用不用点号点出来,而是用方括号。

Person* person=[[Person alloc]init];


这个是两个方法连着调用,最原始的写法是

Person* person= [Person alloc];//分配内存
person=[person init];//初始化


在Main函数中,通过
#import "Person.h"
,引入了Person.h头文件,然后,在Main函数中就可以访问到Person这个类,以及类的属性和方法。

就写到这里吧,接下来我还会分享关于OC的动态类型,动态绑定,分类,扩展类,协议等内容,敬请关注哦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c OC IOS OC-类