学习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

本人公众账号
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容