[玩玩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部分声明的方法。下面我们来动手写吧。
Person.h
Person.m
Person.h
Person.m
这个是Main函数
下面是运行后的输出结果
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岁
@property命令用来声明属性(如@property NSString* name;)。
NSString是Foundation框架中定义的类,用于处理字符串对象。由于NSString是引用类型,所以,声明NSString对象时,要加上*号。NSString对象也可以是一个字符串常量,字符串常量用@开头,如:
下面说一下Objective-C中如何定义一个方法。以下面这两个方法为例
开头的减号说明该方法是一个实例方法,(加号表示类方法)。减号后面的括号中是该方法的返回值类型,如果什么都不返回,则写void。eatFood和setName是方法名,如果方法接收参数的话,需要在冒号后面添加参数,一个冒号加一个参数。有人会问了,andAge是什么鬼?哈哈,我也说不清楚。。。你可以这么理解,这个方法的签名是 ,setName:(NSString*) andAge:(int),所以,当你看到这个签名的时候,你就知道要给这个方法传递什么参数了。那参数名name和age是用来干啥的?形参而已,表管他!
下面说方法的调用,如下面的代码
调用方法,在OC的世界,叫做给对象发送消息,参数总是跟冒号结合在一起的。最奇葩的是,方法调用不用点号点出来,而是用方括号。
这个是两个方法连着调用,最原始的写法是
在Main函数中,通过
就写到这里吧,接下来我还会分享关于OC的动态类型,动态绑定,分类,扩展类,协议等内容,敬请关注哦!
本篇文章和大家一起学习如何编写一个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的动态类型,动态绑定,分类,扩展类,协议等内容,敬请关注哦!
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- Objective-C的内省(Introspection)用法小结
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- ios通过按钮点击异步加载图片
- ios中图像进行压缩方法汇总