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

前言

自己一直从事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.jianshu.com/p/16e10638d3c7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞