软件 Xcode
创建新文件使用命令行工具进行学习Command Line Tool
文件扩展名
扩展名 | 含义 |
---|---|
.c | c语言源文件 |
.cc、.cpp | c++语言源文件 |
.h | 头文件 |
.m | Object-C源文件 |
.mm | Object-C++源文件 |
.pl | Perl源文件 |
.o | Object(编译后的)文件 |
Xcode自动创建的模板文件
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
@autoreleasepool{
NSLog(@"Hello world!");
}
return 0;
}
- Objective-C语言是区分大小写的,Sum、SUM、sum是不同的。
- 注释有两种:使用连续两斜杠(//)或者使用(/*)开始并以(*/)结束
- #import表示将Foundation/Foundation.h文件的信息导入或包含进程序里
- main是一个特殊的名称,它表示程序将在何处开始执行,而之前的int表示main返回的值类型为整形
- @autoreleasepool意为“自动释放池”,@autoreleasepool{***}花括号之内的机制是:它使得应用在被创建新对象时,系统能够有效的管理应用所使用的内存
- NSLog是一个函数,仅仅显示或记录其参数,但在之前会记录该函数执行的日期时间、程序名以及其他数值,如图
- @符号表示之后的为NSString字符串对象,若没有@符号在前,就是常量C类型的字符串
- NSLog(@”The sum of 40 and 30 is %i”,sum);其中%是个特殊的字符,它能被NSLog所识别,跟在后面的字符表示将要显示的值类型,i表示将要显示的是一个整数
类、对象和方法
- 类、对象和方法的辨别
– 通俗易懂的可以这样理解,如下图
Class,Object & Method |
类(class) | 对象或实例(object or instance) | 方法(method) |
---|---|---|
类:Car | 实例(即对象):myCar | 操作:开车drive |
操作:加油getGas | ||
操作:洗车wash | ||
…… | ||
实例(即对象):yourCar | 操作:开车drive | |
操作:加油getGas | ||
操作:洗车wash | ||
…… | ||
…… | …… |
Objective-C采用的特定的语法对类以及实例应用方法
[ClassOrInstance method]或者[receiver message]
*前一种左方括号跟随的是类名或者实例名,后面是一个或多个空格,空格后是将要执行的方法
*后一种我们称之为接受者以及消息,请求一个类或实例执行某个操作时,就向它发送一个信息
- 以车为例子,首先是你的车yourcar
yourcar=[car new]; //get a new car
[yourcar prep]; //get it ready for first-time use
[yourcar wash];
[yourcar drive];
[yourcar getGas];
[yourcar service];
currentMileage=[yourcar odometer];
相同的假如是我的车,他的车都是一样的
利用Objective-C定义一个实际的类:笛卡尔坐标(x,y)
笛卡尔坐标XYpoint类的定义,实例的创建,方法的定义
- @interface 部分
– 用于描述类和类的方法
– 类名首字母一般为大写,约定俗成
– 名称命名规则很简单:名称必须以字母或下划线开头,之后可以是任何字母,下划线或者数字;不能用作名称的有$,!%…等特殊字符,空格,不能以数字开头,保留字不能用。
– -(void) setX:(int)a;前面的负号-表示该方法是一个实例方法,若是+则表示该方法是类方法。(void)表示该方法无返回值,:表示该方法有参数,(int)表示参数类型,a表示参数名称。
一般格式如下: |
---|
@interface NewClassName:ParentClassName propertyAndMethodDeclarations; @end |
@interface XYpoint:NSObject
-(void) setPointname:(char)n;
-(void) setX:(int)a;
-(void) setY:(int)b;
-(void) print;
-(int) x;
-(int) y;
-(char) name;
@end
- @implementation 部分
– @implementation部分包含声明在@interface部分的方法的实际代码,且需要指定存储在类对象中的数据类型。
一般格式如下: |
---|
@implementation NewClassName {memberDeclarations;} methodDefinitions; @end |
@implementation XYpoint{
int x;
int y;
char name;
}
-(void) setPointname:(char)n{
name=n;
}
-(void) setX:(int)a{
x=a;
}
-(void) setY:(int)b{
y=b;
}
-(void) print{
NSLog(@"点%c的笛卡尔坐标是(%i,%i)",name,x,y);
}
-(int) x{
return x;
}
-(int) y{
return y;
}
-(char) name{
return name;
}
@end
- @program 部分
– 类对象声明、创建以及初始化
ClassName *NewClassObject;
NewClassObject=[ClassName alloc];
NewClassObject=[NewObjectName init];
创建与初始化是可以合并在一起的,如下方代码出声明对象的时候合并了创建与初始化
– 设置实例变量值的方法称为设值方法(setter),用于检索实例变量值得发放叫作取值方法(getter)。
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]){
@autoreleasepool{
XYpoint *Point_A;
Point_A=[XYpoint alloc];
Point_A=[Point_A init];
//---Point_A的创建以及初始化---//
XYpoint *Point_B=[[XYpoint alloc] init];
//---Point_B的创建以及初始化---//
XYpoint *Point_C=[XYpoint new];
//---Point_C的创建以及初始化---//
[Point_A setX:3];
[Point_A setY:4];
[Point_A setPointname:'A'];
[Point_B setX:6];
[Point_B setY:7];
[Point_B setPointname:'B'];
[Point_C setX:1];
[Point_C setY:9];
[Point_C setPointname:'C'];
[Point_A print];
[Point_B print];
[Point_C print];
}
return 0;
}