初识object-c中的类

Oc中的关键字都以@开头,

#import <Foundation/Foundation.h> //判断前面有没有包含该文件,如果包含,就不会包含,而在C语言中用#include,每次都会使用#ifndef判断是否存在。

OC中的类

    .h文件就是类的声明文件,用于声明变量、方法,很像Java中的接口声明

    .m文件是类的实现文件,用于实现.h中的方法

oc中方法的定义和Java看起来很不一样,刚开始看还不是很习惯,(类型)方法名:(类型)参数名称 ,如果有多个参数,一个冒号对应一个参数

Person的.h文件

#import <Foundation/Foundation.h>

 

//必须指定继承

@interface Person : NSObject{

    //成员变量定义在括号内

    int age;

    int no;

}

 

//ageget方法

//-动态方法对象方法

//+静态方法类方法

//- (int)getAge;

- (int)age;

-(void)setAge:(int)newAge; //方法名setAge:

-(void)setAge; //方法名setAge;

-(int)no;

//多参数方法一个冒号一个参数

-(void)setAge:(int)newAge andNo:(int)newNo;

-(void)setParam:(int)newAge andNo:(int)newNo andHeight:(int)height;

//方法名是setParam:andNo:andHeight:

@end

由以上可以看出冒号也是方法的一部分

Person的.m文件

#import "Person.h"

 

@implementation Person

 

//-(int)getAge{

//    return age;

//}

 

//get方法

-(int)age{

    return age;

}

-(int)no{

    return no;

}

 

-(void)setAge:(int)newAge{

    age=newAge;

}

 

-(void) setAge:(int)newAge andNo:(int)newNo{

    age=newAge;

    no=newNo;

}

 

@end

测试方法

#import <Foundation/Foundation.h>

#import "Person.h"

 

 

 

int main(int argc,constchar * argv[])

{

 

    @autoreleasepool {

       

       

        //alloc init release方法都属于父类NSobject的方法

        //静态方法alloc分配内存动态方法init初始化

        Person *p=[[Personalloc]init];

       

        //向指针变量P指向的对象发送一条init消息

        //p=[p init];

       

        //[p setAge:20];

        [p setAge:10andNo:20];

        //int age=[p getAge];

        NSLog(@"person的年龄=%i",[p age]);

        //释放对象

        [p release];

       

    }

    return 0;

}

在内存中的关系


oc中的点语法,我们先对上面的方法升级一个版本

#import <Foundation/Foundation.h>

@interface Person : NSObject{

    int _age;  //如果不加下划线,我们在使用.语法的时候很容易混淆,以为是访问了成员变量,所以我们加一个下划线区分

    int _no;

}

- (int)age;

-(void)setAge:(int)age;


#import "Person.h"

@implementation Person

//get方法

-(int)age{

    return _age;

}

-(int)no{ 

    return _no;

}

-(void)setAge:(int)age{

    _age=age;

    //self.age=newAge;// [self setAge:newAge];会造成死循环 无限调用

}

在main方法中使用点语法设置成员变量的值( 实际上是调用了对象的Set方法来设置)

 //[p setAge:20];

 p.age=25; //调用set方法而不是访问成员变量 编译器会变成[p setAge:25]

 int age=p.age;//调用get方法 ==[p age];

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值