学习IOS开发的第2天

今天开始真正地学习oc的语法。发现语法和c java 差不多的。看一遍教学视频,基本都掌握了。

打开xcode,然后新建个mac的command line项目。新建一个car类,会有两个文件,一个.h文件,是类的声明;一个是.m文件,是类的实现。

.h文件中,自动生成了“@interface Car : NSObject”,NSObject是Car类的父类,冒号前面的类继承后面的类。之后的“{ }”里面用于声明类的成员变量,之后再声明方法。最后以“@end”结尾。

oc中方法的声明特别怪异,与c java完全不同。先是写一个“-”或“+”,前者代表方法是实例方法,后者代表是类的静态方法,之后是返回值类型,写在一个小括号里。然后是方法名,名称中间可以插进形参,与方法名用“:”隔开,方法名中的变量名后接着形参。行参前要写明类型,写在括号里。形参后面可以接着写方法名。例如-(int)getPersonAgeById:(int)_id;或-(float)getSpeedByDistance:(float)_distance AndTime:(float)_time; 

 声明完后,在.m文件中实现方法。.m文件以“@implementation Car”为开头,以“@end”结尾。调用方法时,用“[]”。例如,[调用者 方法名:参数]。

根据面向对象的原则,类的成员变量不能直接被其他类访问,要使用setter和getter。但是为每个变量都创建setter和getter很麻烦。于是可以用另一种简便的方法。在Car的.h文件中,用@property修饰变量,如@property(nonatomic) int length。然后在.m文件中写上@synthesize length,之后就可以在其他类中访问Car的成员变变量了。例如car是Car的实例,想要获得length,直接写[car length],想要修改length,可以写[car setLength:12]。

下面分别贴出Car.h Car.m main.m的代码:

//  Car.h

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Car : NSObject

{

   int length;

   int weight;

   NSString *color;

}

-(id)init;


@property(nonatomic)int length;

@property(nonatomic)int weight;


@end

//  Car.m

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import "Car.h"


@implementation Car

-(id)init{

   length=10;

    return self;

}

@synthesize length;

@synthesize weight;


@end

//  main.m

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Car.h"


int main(int argc,const char * argv[])

{


    @autoreleasepool {

       Car *car;

        

        car = [[Caralloc] init];

        

        

        // insert code here...

       NSLog(@"汽车长度%d",[car length]);

       NSLog(@"汽车宽度%d",[car weight]);

        

    }

   return 0;

}


接下来看了一下面向对象方面的知识,例如继承多态。这些基本和java一样。写了一下代码,BYD继承Car类,BYD重写了Car的run方法。全部代码如下:

//  Car.h

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Car : NSObject

{

   int length;

   int weight;

   NSString *color;

}

-(id)init;

-(void)run;

-(void)stop;


@property(nonatomic)int length;

@property(nonatomic)int weight;


@end


//  Car.m

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import "Car.h"


@implementation Car

-(id)init{

   length=10;

    return self;

}

-(void)run{

    NSLog(@"汽车开动了");

}


-(void)stop{

    NSLog(@"汽车停止了");

}

@synthesize length;

@synthesize weight;


@end


//  BYD.h

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import "Car.h"


@interface BYD : Car


-(void)run;


@end


//  BYD.m

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import "BYD.h"


@implementation BYD


-(void)run{

    NSLog(@"比亚迪开动了");

}

@end


//  main.m

//  TestOC

//

//  Created by xd on 14-3-14.

//  Copyright (c) 2014 -. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Car.h"

#import "BYD.h"


int main(int argc,const char * argv[])

{


    @autoreleasepool {

       Car *car;

       BYD *byd;

       Car *car2;

        

        car = [[Caralloc] init];

        //具有自己的run方法和继承于Car类的stop方法

        byd = [[BYDalloc] init];

        //多态,虽然是Car类型变量,但是是BYD的实例

        car2 = [[BYDalloc] init];

        [carrun];

        [carstop];

        

        [bydrun];

        [bydstop];

        

        [car2run];

        [car2stop];

        

        

//        // insert code here...

//        NSLog(@"汽车长度%d",[car length]);

//        NSLog(@"汽车宽度%d",[car weight]);

        

    }

   return 0;

}

今天白天的学习到此为止。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值