从c#快速上手objective-c(一)

作者: 辉仔SAMA | 来源:发表于2016-03-23 15:13 被阅读464次
    大前言
    • 本文适合能熟练使用c#的开发者。

    前言

    • Hello,大家好!这里是辉仔,最近我在学习ios的开发,所以也就自然而然地接触到了objective-c(以下简称objc),由于我之前是做unity开发的,所以我最经常使用的语言是c#,所以这系列的文章我会以我对c#的理解去取出objective-c与c#的相似之处并快速上手objc。并以一个简单的控制台程序作为讲解。

    先来看看两者的语言外貌

    • 以下是我写的两个简单控制台程序的main方法内容,一个用c#写,一个用objc写,并且两个程序的作用是完全一样的。

    • c#版本

    static void Main(string[] args)
     {          
       person huizai = new person("辉仔",18);//实例化一个叫辉仔的对象            
       person lisi = new person("李四", 20);//实例化一个叫李四的对象                    
       person.staticfunction();//静态方法调用                   
       huizai.function();//调用实例化方法                    
       huizai.functionWithOneParameter(450);//调用带有一个参数实例化方法,传入450这个参数                      
       huizai.functionWithTwoParameter(12, 450);//调用带有二个参数实例化方法,传入12和450两个参数                    
       huizai.delegateObject = new person.DesignatedDriving(lisi.designatedDriving);//将huizai对象中的委托对象与方法关联起来           
       huizai.delegateObject(huizai);//调用委托的方法          
       huizai.Driveacar();//调用接口方法                                 
       Console.ReadKey();
    }      
    
    • objc版本
    int main(int argc, const char * argv[])
    {
        person *huizai=[[person alloc] initWithname:@"辉仔" age:18];//实例化一个叫辉仔的对象    
        person *lisi=[[person alloc]initWithname:@"李四" age:20];//实例化一个叫李四的对象    
        [person staticFunction];//静态方法调用   
        [huizai function];//调用实例化方法  
        [huizai functionWithFistParameter:450];//调用带有一个参数实例化方法,传入450这个参数  
        [huizai functionWithFistParameter:12 SecondParameter:450];//调用带有二个参数实例化方法,传入12和450两个参数  
        huizai.delegate=lisi;//确定委托对象 
        [huizai designatedDriving:lisi];//调用委托方法    
        [huizai usecategoryfunction];//调用category拓展方法  
        return 0;
    }
    
    • c#输出结果
    20160323133038.png
    • objc输出结果
    屏幕快照 2016-03-23 下午1.44.29.png
    • 可以看到输出的结果除了接口那块其他都是一样的,当然这里我只展示了main方法,而且输出内容是我控制,即使结构不一样我也可以让他输出一样的结果,不过我这样做也没任何的意义。回归正题,这里你们可以一行一行对比,发现其实做的事基本都是一样的,但熟悉c#的开发者可能会觉objc的语法很诡异,和平常的java,c++都不同,确实是这样,ojbc就是长这样的,但其实只要学习他的语法后就会发现objc再怎么说都只是一门面向对象的编程语言,基本的思想是不会变的,所以掌握c#的开发者是很好上手的。

    今天就先来说说objc和c#类文件的不同

    • 在c#中创建一个类只需创建一个.class文件,甚至在同一文件里可以创建多个类,但在在objc中一个类他包含两个文件,一个.h文件,一个.m文件,如果你学过c++,那么你应该对这很熟悉,而且我可以告诉你objc的.h.m文件和c++中的.h.m文件作用是一样的,.h文件就是用来声明属性,变量,和方法的,.m文件就是用来实现方法的,当然在objc中这两个文件还有更多的作用,这里先不作过多的叙述。
      • objc中的.h和.m文件
    屏幕快照 2016-03-23 下午2.30.02.png
    • 在c#中创建一个变量和方法只需写一遍即可,就像下面这样
    class xxx
    {
       int xxx=35435;//创建一个变量并赋值
       void xxx()//创建一个方法并实现里面的内容
       {
       Console.WriteLine("XXX");
       }
    }
    

    但在objc中就没这么方便了,首先我们要在.h文件里声明

    //这里是xxx类的.h文件xxx.h
    #import <Foundation/Foundation.h>//这里就先理解成引用或预处理就好
    /**objc中每个类必须继承NSobject类,不过其实系统会自动帮你写好*/
    @interface xxx: NSObject 
    int xxx;//声明了一个xxx的int变量,这里不能赋值
    -(void) xxx;//这里声明了一个xxx方法,这里不能实现方法内容
    @end//在@interface和@end之间作声明
    

    然后再在.m文件实现

    //这里是xxx类的.m文件xxx.m
    #import "person.h" //必须要引进自己类的.h文件,不过其实系统会自动帮你写好
    @implementation xxx
    -(void) xxx//实现方法内容
    {
    self.xxx=34234;// 对自身的xxx变量赋值
    NSLog(@"xxx");
    }
    @end
    

    对比一下我相信懂c#的程序员应该可以看明白,但注意以下几点:

    • 在.h文件的interface和@end之间作声明,并且不对声明对象进行赋值或实现。
    • 在.m文件的implementation和@end之间作实现或赋值。
    • 类中的方法一旦在.h文件声明了,必须在.m文件作实现。
    • 方法和变量不一定要在.h文件声明,可以在.m文件实现一个未声明的方法,也可以在.m文件的方法里实现一个临时变量,并且这些方法能被类自身内部调用,但不能作为类的实例化方法(有点类似c#类中的private方法)。

    结语

    • 相信大家已经对objc的类有了一定的了解,下次我会讲讲变量和属性,我们下次见吧!

    相关文章

      网友评论

        本文标题:从c#快速上手objective-c(一)

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