Object C 语法

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;
} 

存取方法gettersetter

在.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;
@end 

Calculator.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;
@end 

Object-c2.0增加两个协议修饰符@optional@required

 #import <Foundation/Foundation.h>
@protocol ICar 
-(void)run;
@optional
-(void)start;
@required
-(void)swing;
@end 

这个协议里面有两个必须实现的方法runswing,有一个选择实现的方法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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值