一: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. [pool drain];
  9. return 0;
  10. }

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

#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. @interface Test : NSObject
  3. @end

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

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

---------------------------------------------------------------------
  1. #import "Test.h"
  2. @implementation test
  3. @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. @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

Objective-C]入门 (xcode helloworld程序 创建类的更多相关文章

  1. 微信小程序入门笔记-小程序创建(2)

    1.工具下载 官方链接:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 我选用的是稳定版 macOS 2 ...

  2. SpringMVC基础入门,创建一个HelloWorld程序

    ref:http://www.admin10000.com/document/6436.html 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要 ...

  3. Helloworld程序的创建以及配置文件的讲解

    创建项目. create Project 选择创建的Project类别以及使用的SDK,可能SDK需要配置或者修改配置. 这个页面是问你是否使用模板创建. Command Line App 会自动创建 ...

  4. 078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类

    078 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 03 创建类 本文知识点:创建类 说明:因为时间紧张,本人写博客过程中只是对知识点的关 ...

  5. Bullet核心类介绍(Bullet 2.82 HelloWorld程序及其详解,附程序代码)

    实验平台:win7,VS2010 先上结果截图: 文章最后附有生成该图的程序. 1. 刚体模拟原理 Bullet作为一个物理引擎,其任务就是刚体模拟(还有可变形体模拟).刚体模拟,就是要计算预测物体的 ...

  6. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序 ...

  7. 对类HelloWorld程序中添加一个MessageBox弹窗

    对类HelloWorld程序中添加一个MessageBox弹窗 分析: 任一程序运行的时候都会加载kernel32.dll的,但MessageBoxA()这个API却是在user32.dll中的.所以 ...

  8. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...

  9. Node.js入门以及第一个helloworld程序

    1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...

随机推荐

  1. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...

  2. Restore IP Addresses——边界条件判定

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  3. Gray Code——陈瑶师姐面试时候要用回溯算法

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  4. WordPress函数query_posts用法汇总

    最近经常有网友跟我咨询WordPress函数query_posts的相关用法,说起来query_posts实在是太强大,参数无数,用法更是无数,如果让我说它的用法,我根本没法一一说清楚.开始之前,你可 ...

  5. The 18th Zhejiang University Programming Contest Sponsored by TuSimple -C Mergeable Stack

    题目链接 题意: 题意简单,就是一个简单的数据结构,对栈的模拟操作,可用链表实现,也可以用C++的模板类来实现,但是要注意不能用cin cout,卡时间!!! 代码: #include <std ...

  6. POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17497   Accepted: 7398 De ...

  7. 线段树+哈希【CF580E】Kefa and Watch

    线段树+哈希[CF580E]Kefa and Watch Description \(n\)个数的字符串,\(m + k\)个操作 1 l r k把\(l - r\)赋值为\(k\) 2 l r d询 ...

  8. Linux命令之chattr

    chattr [-RVf] [-v version] [mode] files… chattr修改文件在Linux第二扩展文件系统(E2fs)上的特有属性.符号模式(mode)有+-=[aAcCdDe ...

  9. 分解质因数法求最大公约数(javascrip实现)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  10. noip2012开车旅行 题解

    题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选 ...