美文网首页iOS 开发 IOS与java对比学习
学习ios之路-objective-c 类,对象,方法

学习ios之路-objective-c 类,对象,方法

作者: 牛晓伟 | 来源:发表于2016-04-10 23:45 被阅读1625次

    前言


    自己一直从事android的开发,最近终于开始了ios的学习生涯,现在开发ios的语言有objective-c和swift,所以对于我这样的初学者久产生了纠结,到底是应该学习哪个语言?
    关于这个问题也请教了一些大牛,最后自己决定学习objective-c(简称oc),理由是:swift现在国内的使用率还比较低,使用率低就会导致遇到问题寻找路径要少。
    因此计划记录下自己的学习路程,这样既能加深对知识的理解,同时与初学者共勉,在文章中我会尝试把objective-c与java进行对比,对比了才会对知识有更深刻理解。

    本节内容


    oc中的类,对象,方法。

    关于类,对象的一些基础的面向对象的概念此处就不多讲了。


    我们先从用java和oc分别定义一个相同类的角度来看下他们之间的不同。
    java中类的定义:

        ClassName.java文件:
    
        public class ClassName extends ParentName{
              //属性声明
              private int a;
              private String str;
              
              //set get方法
              public void setA(int a){
                   this.a = a;
              }
    
              public int getA(){
                   return a;
              }
    
              public void setStr(String str){
                    this.str = str;
              }
    
              public String getStr(){
                    return str;
               }
        }
    

    oc中类的声明,定义:

    ClassName.h文件:类的声明
    
    #import <Foundation/Foundation.h>
    @interface  ClassName : ParentClassName{
          //类实例属性声明
          int a;
          NSString* str;
    }
    
    //方法的声明(方法有类方法和类实例方法2种)
    -  (void)  setA: (int) paramA;
    -  (int) getA;
    -  (void)  setStr: (NSString*) paramStr;
    -  (NSString*) getStr;
    
    //结束符
    @end
    
    
    ClassName.m文件:类的实现(或类的定义)
    
    #import <Foundation/Foundation.h>
    #import "ClassName.h"
    @implementation ClassName
    - (void) setA: (int) paramA{
          a = paramA;
    }
    
    - (int) getA{
           return a;
    }
    
    - (void) setStr:(NSString *) paramStr{
          [str release];
          str = [paramStr copy];
    }
    
    - (NSString *) getStr{
          return str;
    }
    
    //结束符
    @end
    

    看了以上的代码,是不是首先第一感觉是java中类的定义相比oc要简单的多,那我们就详细的讲解下。

    .h和.m两种文件


    oc中类的声明,定义是在2种文件中进行的。
    首先说下这2种文件:

    • .h文件,又称头文件以 .h 作为后缀。头文件主要进行类的声明,类的声明主要有以下内容:
      • 类的名字,类的层级结构(继承的父类,实现的协议(协议是java中的interface))定义
      • 声明类包含哪些实例属性
      • 方法(类的方法和类的实例方法)进行声明,只是声明,不包含方法的实现
    • .m文件,可以称为实现文件,主要是对.h文件中类声明的方法进行实现

    java中的源文件类型就只有.java一种。

    类的声明,定义


    oc中

         类声明开始命令   类的名字   继承符号   父类的名字
         @interface     ClassName  :       ParentName{
         
               类的实例属性定义处.....
         }
         方法声明处......
         //结束命令
         @end
         
         类的定义开始命令     类的名字
         @implementation   ClassName
         方法实现处......
          //结束命令
          @end 
    

    类的声明放在.h文件中,文件名最好是定义的类的名字,类的声明以 @interface命令开始 ,以 @end命令结束," ClassName"是类的名字, “ :”是继承符号 类似于java中的“ extends” , “ParentName”是父类的名字。一对“{}”定义了类的实例属性, 类的方法声明是放在“{}”后面。

    类的实现或定义放在.m文件中,文件名最好是定义的类的名字,类的定义以@implementiation命令开始,同样以@end命令结束,处于命令之间的就是方法的实现位置。要想实现一个类,必须通过“#import ”的方式把类的.h文件引入。类声明的名字与类的实现的名字必须相同

    java中

        public  class  ClassName  extends  ParentName{
    
                类的属性定义.....
                类的方法定义.....
         }
    

    类的属性


    oc中

     属性定义:
       基本类型定义(基本类型有int,float等):
             基本类型  变量名
             int  a;
       类 类型定义:
             类名 * 变量名 (类类型定义要用指针来定义)
             NSString *  str; (NSString是oc中的字符串类)
    

    java中

     属性定义:
              访问权限符 [static final] 类型名 变量名
              private int a;
              protected String str;
              public static final String MAX_NUM = "max_num";
    

    类的方法定义


    oc中
    oc中方法声明,定义是分2部分的,方法的声明在类声明(.h文件)时进行,只是对类进行声明,不会涉及到具体实现。方法的定义或实现是在类的定义(一般在.m文件)时进行的。

        方法的声明:  (-代表类实例方法, +代表类方法)
        -/+       (void)    methodName :          (int)     param;
        方法类型    返回值   方法名        接收参数   参数类型   参数名字
    
        例子:
        -   (void)  setA: (int) paramA; 
        +  (int )   a;   (没有参数的话就没有":"及后面部分)
        
        方法的实现:
        方法类型    返回值   方法名        接收参数   参数类型   参数名字
        -/+       (void)    methodName :          (int)     param{
    
        }
    

    "-"代表类实例方法, "+"代表类方法

    java中

                  void  methodName( int        param){}
         访问权限  返回值    方法名   参数类型     参数名
         
          例子:
          public void setA(int a){}
    

    对象


    oc中

        对象声明初始化:
        ClassName *  className = [[ClassName alloc] init]
    

    首先说下oc中向一个类或对象发送消息(其实也叫方法调用)方式

        [类/对象  方法名:参数]
    

    所以[ClassName alloc] 会向ClassName发送一条分配空间(alloc)的消息,alloc是NSObject中的方法,该消息会返回一个ClassName类型的对象。然后再次向ClassName对象发送一条init消息,来初始化对象的属性,首先会初始化父类中的属性,其次才是子类中的属性, 这个init类似于java中的构造函数,java中构造函数也是先调用父类中的构造函数,初始化父类中的属性,其次在对子类中的属性进行初始化。

    总结


    关于oc中的类,对象,方法的声明,定义已经完毕,这只是一个很初级的对oc的一个认识,后面还会继续深入学习,继续自己的ios学习历程,同时希望ios大神能指出我文章中的有误之处,因为自己是初学者有很多地方还不深入。

    本人微信:704451290

    本人公众账号

    相关文章

      网友评论

        本文标题:学习ios之路-objective-c 类,对象,方法

        本文链接:https://www.haomeiwen.com/subject/jkymlttx.html