Objective-C学习笔记(三):OC之常用的OC语法下

一、类的声明与实现

     1.OC中常见两种文件:.h文件和.m文件

        .h文件是头文件,包含方法和属性的声明。

        .m文件是参与编译的文件,用来实现类中声明的方法。

        这里我们扩充一下,在学习C语言中,我们会遇到几种不同后缀的文件:.c , .o , .out , .exe , .h。其中.c文件是C语言源文件,也就是你自己敲出来的代码;.o文件(.obj)是目标文件,是编译成功后生成二进制文件,不可以直接使用;.out(linux下)和.exe是可执行文件,是目标文件与库文件经过链接(link)产生的。

     2.声明类使用关键字@interface和@end

    

    3.实现类使用关键字@implementation和@end

      

二、函数的声明和实现

    1.在OC中我们常把函数称为方法。

        1>方法的声明(.h文件)

              -(int)sum:(int) a and:(int) b;  //一个参数带一个冒号,方法名的设计最好要清楚合理,一目了然

        2>方法的实现(.m文件)

              -(int)sum:(int) a and:(int) b{

                       return a+b;

              }


    2.方法分为+方法和-方法。+方法是类方法(静态方法),-方法是实例方法(动态方法)。

       类方法是属于整个类,而不属于某个对象; 类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量;类方法的调用可以通过类名.类方法或对象.类方法,而实例方法只能通过对象.实例方法来访问;类方法只能访问类方法,而实例方法可以访问类方法和实例方法;类方法不能被覆盖,而实例方法可以被覆盖。

       另外,在.h中声明的所有方法作用域都是public类型,不能更改。


三、成员变量(实例变量/属性)

      常用作用域

            @public  在任何地方都可以直接访问

            @private  只能在当前类的对象方法中直接访问

            @protected   只能在当前类及其子类的对象方法中直接访问

      在.h文件中声明成员变量,默认是protected属性的;而在.m文件中声明成员变量,默认是private属性的,即使在前面添加public也没有用,除非使用时在头文件中导入.m文件。但是,两者不能声明同名的成员变量。


四、创建一个对象

      1.Car *car=[Car new];  //new操作符会在堆内存中开辟一个新的空间

        Car *car=[Car alloc]init];  //这里是完整的创建一个可用的对象,alloc用于分配存储空间,init初始化对象

      2.重写init方法(自定义构造方法)

        当你在.h文件中声明好某个成员变量,创建好一个新的对象,却没有给对象的该变量赋一个值,那么那个变量默认值为0。但是如果你想在创建好对象的同时给它赋一个初始值怎么办呢?这就是现在要讲的重写init方

        1.自定义构造方法要注意三点:

           1>一定是对象方法,以-开头

           2>返回值一般是id类型

           3>方法名一般是init开头

        2.示例:

           1>Person.h:

           

           2>Person.m:     

           

          3>main.m

          

          4>运行结果:

               

        这里我讲解一下代码:在.m文件中重写了init方法,返回值为id类型。init方法中有一个[super init],意思是初始化父类中声明的成员变量和属性。这句话是必须的哈。self表示当前对象,在这里指的就是新创建的那个对象。那个if条件语句是表示,如果初始化对象成功,self就肯定不为nil,那么就改变age属性,让其等于10。最后return self,返回一个已经初始化的对象。

      3.我们的构造方法可以取其他的名字,比如initwithname啊balabala的,也可以带一些参数,跟上面讲的函数方法的实现类似。还是给个例子吧。

       1>Person.h

       

       2>Person.m

       

       3>main.m

       

       4>运行结果

       

      最后我们在这里提一下点语法的概念,点语法的本质还是方法调用,当使用点语法的时候,编译器会自动展开成相应的get,set方法。例如:

     stu.age=10  ->它等同于[stu setAge:10]; 

     int a=stu.age  ->它等同于int a=[stu age];//不过嘛这个还是要依据具体代码来具体判断

    另外要注意在set和get方法中使用self.age=age和return self.age是不允许的,会造成死循环。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值