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

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

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,690评论 0 9
  • 官方源码下载地址:http://download.csdn.net/detail/liangliang103377...
    有一种再见叫青春阅读 1,963评论 2 11
  • 啊,不对,小胖胖说自己叫大胖胖(捂脸)。我时常在想我们俩的相遇大概是我这平凡的二十几年里最神奇的一件事了,这还要从...
    卿情阅读 284评论 4 4
  • 白玉堂,历史有其人,清初平度市张舍人,历史记载老白家良田万顷家中巨富当铺钱庄不计其数,白家第六代当家人白玉堂,文采...
    三侠五义传阅读 1,433评论 1 5
  • 蛰伏人间三千年 你是失足的天使流落人间沉潜在岁月的深渊我躲在时间的沙漏里等待你出现我喜欢你不在乎岁月和时间遇...
    积累阅读 276评论 0 1