博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C]入门 (xcode helloworld程序 创建类
阅读量:5927 次
发布时间:2019-06-19

本文共 4959 字,大约阅读时间需要 16 分钟。

一:objective-c简介

Objective-C是进行iPhone软件开发的语言
Objective-C语言是C语言的一个扩展集
Objective-C是一种面向对象的语言
大小写敏感
程序语句必须以(;)结束
开发工具(Xcode)

二、第一个Objective-c程序

启动 Xcode。初次启动的时候,也许会弹出一个“Welcometo Xcode”的一个对话框,我们可以把它关掉。 

然后是选择屏幕上部菜单的“File->New Project”,出现了一个让你选择项目种类的对话框。你需要在对话框的左边选择“CommandLineUtility” ,然后在右边选择“FoundationTool”,然后选择“Choose...”按钮。输入项目名称“hello world",然后选择save as 

---------------------------------------------------------------------
  1. #import<Foundation/Foundation.h>   
  2.     int main (int argc, constchar * argv[])  
  3.     {  
  4.         NSAutoreleasePool * pool = [[NSAutoreleasePoolalloc] init];  
  5.         //----------------------------------------   
  6.         NSLog(@"Hello,iphone!");  
  7.           
  8.         //----------------------------------------   
  9.         [pool drain];  
  10.         return 0;  
  11.     }  

---------------------------------------------------------------------

#import<Foundation/Foundation.h>

告诉编译器导入Foundation框架中的Foundation.h主头文件;说到这里,要说一下Cocoa:
Cocoa包含两个核心框架:Foundation框架和Appkit框架
CocoaTouch包含两个框架:Foundation框架和UIKit框架
再说一下框架:所谓框架 ,就是一个集合,其中包含着头文件,库等资源 文件;每个框架 中均有一个主头文件,该头文件包含了框架 中各个 头文件,一但引入 了主头文件,就可以在自己的程序 里使用任何在该框架 里的类;这就是框架!
 
格式:int main(intargc, const char* argv[])
每一个程序有且只有一个main函数
表示程序将在何处开始执行。
return 0;
0:程序正常
非0:通常表示出现了一些问题(如:很可能无法找到程序所需的文件)
 
NSAutoreleasePool *pool = [[NSAutoreleasePoolalloc] init];

//可以理解为在内存中开辟了一块共用的内存空间

内存管理在IOS开发中的非常重要的

[pool drain];

//释放共用的内存空间

NSLog(@"Hello,iphone!");

NSLog是Objective-C库中的一个函数

作用:向控制台输出文本内容

将显示常量字符串,类似于printf函数,并且它会自动在文本后面添加'n'。当然其中也可以使用转义字符。例如还有:

NSLog(@"The sum of 50 and 25 is %i",sum);    

//----------------------------------------

单行注释:使用连续的斜杠(//)
多行注释:使用结尾
不能嵌套使用
好处
比较清晰的指出该断程序用意
有利于团队合作,有利于后期的代码维护

三、定义一个新类:

选择File文件里New一个File文件,在打开的对话框里,选择objective-c class;输入类名为Test:

它会自动生成Test.h,Test.m文件:.h是头文件,.m是objective-c的源文件;

首先是test.h头文件代码如下:

---------------------------------------------------------------------
  1. #import <Foundation/Foundation.h>   
  2.   
  3. @interface Test : NSObject  
  4.   
  5. @end  

--------------------------------------------------------------------- 

 然后是test.m源文件代码如下:

---------------------------------------------------------------------
  1. #import "Test.h"   
  2.   
  3. @implementation test  
  4.   
  5. @end  

--------------------------------------------------------------------- 

@interface部分

描述类、类的数据成分以及类的方法

@的是指令符

@implementation部分

实现这些方法的实际代码

@interface部分的一般格式:

@interface NewClassName : ParentClassName{

memberDeclarations;}

methoddeclarations; 

@end   

@implementation部分的一般格式:

@implementation NewClassName

methodDefinitions;

@end  

它是以@interface开始,以@end结束!!!!@implementation也是这样,以@end结束!!!;

类的命名规则:以字母或下划线开头,之后可以是任何字母,下划线或者0~9数字组合,类名以大写字母开头,实例变量、对象以及方法的名称以小写字母开始 ;

这就是创建类;

四、声明定义变量及方法

Test.h

---------------------------------------------------------------------
  1. @interface Test : NSObject{//属性必须定义在这个大括号里   
  2.     int intX;  
  3.     int intY;      
  4. }  
  5. +(int) staticIntY;//属于类,不属于对象   
  6. -(void) print;//无参方法   
  7. -(void) setIntX:(int)n;//带一个参数的方法   
  8. -(void) setIntY:(int)d;  
  9. -(void) setIntX:(int)n andSetIntY:(int)d;//多输入参数的方法   
  10. -(int) intX;//get方法   
  11. -(int) intY;  
  12. @end  

--------------------------------------------------------------------- 

函数开头的(-)号或者(+)号表示:

(-) 该方法是实例方法(对类的特定实例执行一些操作) ;(+)是类方法(即对类本身执行某些操作的方法,例如创建类的新实例) 

函数的声明示例:

-(void)setNumerator:(int)n第一个表示方法类型,返回类型,接着是方法名,方法接受的参数,参数类型,参数名

注:如果不带参数则不用使用“:”号,从程序中可以看出来

如果没有指定任何返回类型, 那么默认是id类型, 所有的输入参数默认也是id类型 (id类型可用来引用

任何类型的对象) 。 

有多个参数的方法:

-/+ (return type) function_name : (parameter type) parameter1 otherParameter : (parameter_type) parameter2;

如果只有一个参数,在: 后面声明参数的类型和名称;如果有多个参数的话,每个参数前面都要有一个:, 然后接着是参数类型和参数名称。可是 

Test.m文件
---------------------------------------------------------------------
  1. @implementation Test  
  2. +(int)staticIntY{  
  3.     Y+=1;  
  4.     return Y;  
  5. }  
  6. -(void)print{  
  7.     NSLog(@"两个数相加 的结果 为:%i",intX+intY);  
  8. }  
  9. -(void)setIntX:(int)n{  
  10.     intX=n;  
  11. }  
  12. -(void)setIntY:(int)d{  
  13.     intY=d;  
  14. }  
  15. -(void) setIntX:(int)n andSetIntY:(int)d{  
  16.     intX=n;  
  17.     intY=d;  
  18. }  
  19. -(int)intX{  
  20.     return intX;  
  21. }  
  22. -(int)intY{  
  23.     return intY;  
  24. }  
  25.   
  26. @end  
--------------------------------------------------------------------- 
这个实现类没有什么好说的,相信大家都能看懂,就只是实现方法; 

然后就是在main.m文件里测试了:

---------------------------------------------------------------------
  1. Test *test=[[Test alloc]init];//对象的声明 和初始化,其中alloc为对象 申请了内存空间,init则完成 了对象 的初始化。在完成 了对象 声明 和初始化以后,就可以调用对象 的方法了。   
  2.     [test setIntX:1];//方法调用   
  3.     [test setIntY:1];  
  4.     [test print];//无参调用   
  5.     [test setIntX:2 andSetIntY:2];//多参方法调用   
  6.     [test print];  

--------------------------------------------------------------------- 

创建一个Test对象:

Test *test=[[Test alloc]init];

一定要注意在数据 类型的右边有一个星号。所有的objective-c对象变量都是指针类型的。等号右边的语句是创建 一个对象 ,这是一个嵌套 的方法调用。第一个调用的是Test的alloc方法。这是一个相对对比较 底层的调用 ,因为该方法其实是为test变量申请一个内容 空间,第二个调用的是新创建 对象 的init方法,这个init方法用于初始化变量值。init实现了比较常用的设置,比如设置实例变量的初始值。

后面两句是调用方法:

【对象名 方法名:实参】;有参调用,如果是无参的就没有冒号及后面的,如果是多参的:【对象名 方法名:实参方法名:实参】。

:创建一个新对象,都要请求分配内存,在完成对该对象的操作时,必须释放其所用的内存空间

i Phone平台不支持垃圾回收机制外部要访问实例变量需要通过类的方法来检索其值,不能直接访问 

在Objective-C当中,所有的对象都可以使用id来进行区分。我们知道一个类仅仅是一些数据外加上操作这些数据的代码 ,所以id实际上是指向数据结构的一个指针而已,相当于void*。 

总结一下对象声明的语法:

类名 *test,*test1;

定义 了test和test1是指定类的对象。要注意的是,这只是定义了一个指针变量,尚未为它所包含的数据获得内存空间。在调用alloc方法之后,这些对象 才获得(分配)空间。

输出结果为:

2012-03-24 11:24:00.522 HelloWorld[652:707]两个数相加的结果为:2

2012-03-24 11:24:00.612 HelloWorld[652:707]两个数相加的结果为:4

 

转载地址:http://rahvx.baihongyu.com/

你可能感兴趣的文章
mongodb3.2安装与基本配置
查看>>
ASA 5540 enable密码破解
查看>>
根据PrivateKey生成 PublicKey
查看>>
Shell脚本 自动检测网卡与对应IP
查看>>
Exchange2007-Exchange2010的升级-01 Exchange Server的简介
查看>>
GitHub已将持续集成服务器Janky开源
查看>>
python之re模块(正则表达式)
查看>>
ubuntu脚本里批量修改密码
查看>>
学会批处理
查看>>
软件测试定义和分类
查看>>
我的友情链接
查看>>
Linux openssl 实现
查看>>
eclispe 启动报错
查看>>
Open×××的路由问题一则
查看>>
如何优雅的升级Ruby项目
查看>>
iOS 9适配系列教程:改用更安全的HTTPS
查看>>
介绍MyBatis代码生成网站(三) --- [ Mapper接口类 ] 实际生成效果
查看>>
Nginx中413 request entity too large问题
查看>>
JS json object 与 string 相互转换
查看>>
sudo命令用法介绍
查看>>