面向对象基本语法

OC完全兼容C(.m)语言,可以在oc语言中混入c(.c)语言代码甚至是c++(.mm)代码。

oc关键字:基本上所有关键字都是以@开头。

在c语言中用 “hello"  表示字符串,在oc 中用   @“hello" 表示字符串。

oc中的基本数据类型:  char , int , float, double , BooL(Yes \ No);

BOOL 类型的本质:

typedef   signed   char  BOOL ;

 定义一个新类型代替 char 类型,由于char 类型可以做整型使用,所以BOOL 也可以做为整型输出。

  BOOL类型变量有两种取值,Yes,NO.

  在系统内部:# define   YES (BOOL) 1;

              # define   NO (BOOL) 0;           

nil 相当于 c语言中 NULL 或者0;

  基本语句有: 循环语句( while  , do  while , for);

注释和 c 语言一样: //  和 /* ...*/

 屏幕 输出和c语言不同的是用到了   NSLog(@"hello"); 并且 NSLog 中不用使用换行符 \n, 它会自动换行,并且输出时间日志等。

NSLog 在 foundation 框架中,所以当文件程序使用NSLOg 输出时 需要包含 foundation 框架的主头文件,就可以使用整个框架的东西,主头文件时最重要的文件,名字一般和框架名一样,一般都是框架名.h ,包含了框架中的所有其他文件。

 OC 中使用  # import 来代替  # include  ;

# import 的作用:

                跟# include 一样,拷贝文件的内容;

                自动防止文件的内容被重复拷贝、

C语言是面向过程的,关注的事解决问题需要哪些步骤,OC是面向对象的语言,关注的事需要哪些对象。

专业术语:

           面向过程: Procedure    oriented 

           面向对象:Object  oriented 

面向对象编程:Object  oriented   programming  

  面向对象中有两个重要的概念:类和对象。类是抽象的,对象是具体的。

OC中面向对象1:oc 中的类相当于图纸,用来描述一类事物:,也就是说要想创建对象必须先有类。

                           2:oc利用类来创建对象,对象是类的具体存在。

                           3:因此,面向对象解决问题应该是先考虑需要设计哪些类,在利用对象创建多少对象。

   类是无数个对象相同属性的概括,描述。

 类的设计:1: 事物名称   (类名)

                     2:属性

                     3:行为(功能)

   一般的名词都是类,拥有相同或者类似属性和行为的对象都可以抽象出一个类。

 类命名规范:第一个字母必须大写,并且不能用下划线。  多个英文单词时,第一个英文单词要大写,使用驼峰标示。 

哪个对象最清楚这个行为,就把这个行为写到哪个对象中去。

 完整的写一个类;类的声明和实现。

类的声明用来声明对象的属性,行为。

例如:

  @interface   Person :NSObject 

//   类继承自NSObject 可以让类具有创建对象的能力

{   @public 

//  可以让后面的指针变量修改成员变量的值

   int  age ;

 //  年龄属性

  double  height;

//   身高属性

}

- void run ;

@end 

声明了一个类,大括号里写类的属性。属性中的成员变量默认的初始化都是0.  方法的声明不能在大括号里。

@implementatio   Person 

- void  run 

{

    NSLog (@"跑起来了");

//  方法的实现

}

@end 

  类的实现中写方法的实现

# imort  <Founntation/Fountation.h>

 int  main ()

 {

Person * a = [Person   new ];

//  这句代码执行后就会创建一个新的person 对象。

//  每次执行这样的代码都会生成新的对象

//  用一个person 类型的指针指向 这个新对象

 a->age = 12;

 //  对新对象中的age 成员变量进行赋值操作。

[ a   run ];

//   给 a 指向的对象发送一条run 消息,就是说a 指向的对象要执行run这个函数。

     }

在类中操作对象修改对象,只能通过指针进行

方法的命名规范:

   只要是oc的方法必须以减号 - 开头。

   对象方法中的数据类型必须要用小括号括起来,小括号只能扩住数据类型。

   不接收任何形式参数: - void run ;

  方法的声明在类的声明里,方法的实现在类的实现中。方法依赖于类的存在而存在。

带形参的方法:

例如:

- ()方法名:()形参名;

//  此时有一个形参

oc 方法中一个形参对应一个冒号

冒号也是方法名的一部分

不能两个对象方法同名

类的内存剖析:

    我们了可以利用一个类创建出无数个对象,每个对象都是自己的属性。并且共用一份方法。

在使用类创建对象之前,系统会先把类加载进内存,且只加载一次,然后在创建新的对象,但是每次创建新对象都会给新对象分配一个新的内存地址。

在内存中类中只存放了方法列表,,、每个对象内部都有一个isa 指针,这个指针指向它所对应的类,当对象调用某个方法时就会顺着isa 指针在类中寻找对应的方法,找不到的话,就去父类中找。当方法内部要返回成员变量时,就会访问当前对象中的成员变量。 

oc中的对象一旦创建,即使是在代码块中也不会随着代码块的结束而结束,代码块的内存空间依然存在,除非文件结束或者手动清除。

类的一些常见错误:

1:只有类的声明没有类的实现。

2:漏掉了@end

3: @interface 和  @implementation 嵌套

4:两个类的声明嵌套

5:成员变量没有写在大括号内

6:方法写在了大括号内


语法细节: 成员变量不能在大括号内部进行初始化,不能直接被赋值。

                     方法不能当做函数一样调用。

                     不能随便将成员变量当做c语言中的变量一样用一些关键词进行修饰。

                     类的实现可在main 函数之后。只要在类的声明之后就行、

oc 方法与函数的区别;

1:方法只能用在类中,只能声明在@interface 实现在@ implementation 中。

2:方法不能独立与类存在,而函数与类没有任何关系。函数归整个文件所有。

3:方法只能由对象调用。函数没有任何要求限制,可以写在任何地方,只要不在@interface 和@ end 之间就行。

4:函数内部不能直接访问成员变量,因为函数与对象没有任何关系。


类也可以只有实现没有声明

例如:   

@ implementation  Dog : NSObject 

{

int  age ;

  double  height;

}

  -( void )  run

NSLog (@"跑起来了");

}

@end  

这样也可以使用一个类,但是不能在类的实现中定义和类的声明中相同的成员变量。

匿名对象: car *c ;

                    c =  [Car  new ];

                    c-> speed = 130;

其实这三行相当于:

                  [Car new ]-> speed = 130;

 因为这个新对象没有任何指针指向它,所以没有名,成为匿名对象

误区: [Car new ]-> speed = 130; 

     [[Car   new ]   run ];

 //     这句语句有问题,因为这是相当有新建了一个对象然后调用新建对象的 run方法,可是这个容易引起歧义,在内存中是错误的。

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

推荐阅读更多精彩内容