aser一天学会object-c基础语法
Posted on Jul 30 2014其实学什么语言最重要的就是动手,这句话不知道被多少人说过。所以要想尽快学会object-c,就赶紧动手搞起来。首先要做的是去下载一个XCode。XCode下载好后,先新建个项目。这时候别想我连基本语法还没学呢,动手能做什么呢。没事跟着咱一步步来。什么新建项目不知道怎么弄,好吧。
这里的product name就是项目名称。
Company Identifier:一般就填写as中的包管理路径。命名方式公司域名的倒写。其他选项先不用管,直接下一步
新建好项目后,会发现有AppDelegate.h和AppDelegate.m这两个文件。这就是传说中的入口文件,相当于as项目中的Main.as。
下面说到一下object-c中的类。object-c的类与as类不同的是,每次新建类后都会产生两个文件,一个.h结尾,一个.m结尾。.h是传说中的头文件,头文件一般相当于一个类的声明,这里面会有一些变量和方法的声明。而实现部分则在.m文件中。了解这些后,我们来看看object-c中的调试函数。as中有trace神器对不,object-c里面神器是NSLog。万能的NSLog能输出你想要的一切。不信你试试。
调试函数
NSLog(@”hello world!”);
NSLog(@”%@”,name); //打印字符串
NSLog(@”%c”,a); //打印单个字符
NSLog(@”%i”,isTrue);//打印布尔值
NSLog(@”%i”,i); //打印整形变量
NSLog(@”%f”,f); //打印单精度浮点数
NSLog(@”%.2f”,f); //打印单精度浮点数,且只保留两位小数
NSLog(@”%e”,f); //打印科学技术法
NSLog(@”i=%i,f=%f”,i,f);//同时打印两个整数
变量
变量分类
object-c中变量分成三种:基本数据类型,对象类型,id类型。
- 基本数据类型有:int,float,double,char类型和BOOL(YES NO)。
- 对象类型就是类或协议所声明的指针类型:NSString *str = @”我是字符串”;
- id类型可以表示任何类型,一般只是表示对象类型,不表示基本数据类型。
- nil
变量定义
int a = 2;
NSString *str = @”我是字符串”;
定义规则:变量类型在前,变量名在后。
类
在XCode中选择File->New->File…->Cocoa Touch->Object-c Class->填上类名和继承关系后,XCode就会生成想要的新类。新类会产生两个新文件,一个是.h结尾,一个是.m结尾。
.h文件用来描述类,一般类的属性和方法在此定义。
.m文件是用来实现.h中定义的属性和方法。
Calculator.h
#import <Foundation/Foundation.h> @interface Calculator : NSObject { int numerator;//分子 int denominator;//分母 } -(void)print; -(v oid)setNumerator:(int)n ; -(void)setDenominator:(int)d; @end
Calculator.m
#import "Calculator.h" @implementation Calculator -(void)print{ NSLog(@"numerator=%i,denominator=%i",numerator,denominator); } -(void)setNumerator:(int)n{ numerator = n; } -(void)setDenominator:(int)d{ denominator = d; } @end
在类的定义中方法名前面使用-表示类的实例方法,+表示类方法,相当于as中的静态方法。如在.h中定义了方法,说明这个方法是公开的。要是没在.h中定义,只在.m中实现,该方法就是内部方法。
循环和条件语句
循环
int num; num = 0; for (int n =0; n <5; n++)="" {="" num="" +="n;" nslog(@"%i",num);="" }="" <="" pre=""> #### 条件语句if(){ }else if(){ }else{ }#### switch语句switch(){ case : break; case : break; case : break; default: break; }存取方法getter和setter
在.h文件中用@property定义变量
在.m文件中使用@synthesize指令//Calculator.h/
#import <Foundation/Foundation.h> @interface Calculator : NSObject { int numerator;//分子 int denominator;//分母 } //存取方法 @property int numerator,denominator; -(void)print; -(void)setNumerator:(int)n ; -(void)setDenominator:(int)d; @endCalculator.m
#import "Calculator.h" @implementation Calculator @synthesize numerator,denominator; -(void)print{ NSLog(@"numerator=%i,denominator=%i",numerator,denominator); } -(void)setNumerator:(int)n{ numerator = n; } -(void)setDenominator:(int)d{ denominator = d; } @end方法声明和多参数方法的定义
带参数名的方法
.h中
-(void)setDenominator:(int)d setNumerator:(int)n;
.m中-(void)setDenominator:(int)d setNumerator:(int)n{ numerator = n; denominator = d; }不带参数名的方法
.h中
-(void)set:(int)d :(int)n;
.m中-(void)set:(int)d:(int)n{ numerator = n; denominator = d; }调用:
[calc set:1:3];处理异常
@try{ } @catch(NSException *err){ }分类
分类有点像继承,但是不同的是,分类是能给已有的类添加新的方法。这一特性aser是没有的。类外分类还能起到分散实现的左右。
下面我们为NSString添加新方法#import <Foundation/Foundation.h> @interface NSString (NewString) -(int)toNumber; @end#import "NSString+NewString.h" @implementation NSString (NewString) -(int)toNumber{ return 123; } @end协议
协议相当于as中的接口:下面这种写法是不是很熟悉
#import <Foundation/Foundation.h> @protocol ICar -(void)run; @end实现协议
#import <Foundation/Foundation.h> #import "ICar.h" @interface Car : NSObject -(void)run; @endObject-c2.0增加两个协议修饰符@optional和@required
#import <Foundation/Foundation.h> @protocol ICar -(void)run; @optional -(void)start; @required -(void)swing; @end这个协议里面有两个必须实现的方法run和swing,有一个选择实现的方法start
静态属性和方法
静态属性
在Object C的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中。
static 属性只能定义在implementation中,而不能定义在interface中,而且写在implementation之外或者方法之中。#import "Person.h" static int count; @implementation Person @synthesize age; @synthesize name; -(void) write{ NSLog(@"姓名:%@ 年龄:%i",name,age); } +(void) hello{ count++; NSLog(@"static = %i",count); } @end静态方法
静态方法 就是将 “-“ 改为 “+” 即可。
+(void) hello; 在interface中定义如上方法签名,而在implementation中实现这个方法。
转自:http://amswf.com/2014-04-24-1/