一、OC简介

1.简介

  它是C语言的基础上,增加了一层面向对象语法

  OC完全兼容C语言

  可以在OC代码中混入C语言代码,甚至是C++代码

  可以使用OC开发mac OS X平台和IOS平台的应用程序

2.关键字

1> 基本上所有的关键字都是以@开头

2> 关键字

  @interface、@implementation、@end

  @public、@protected、@private、@selector

  @try、@catch、@throw、@finally

  @protocol、@optional、@required、@class

  @property、@synthesize、@dynamic

  self、super、id、_cmd、__block、__strong、__weak

3> 字符串以@开头

  例如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串

4> OC程序开发过程

5> 跟C语言一样,OC成粗的入口依然是main函数

  终端指令也一样。编译cc –c main.m ;链接cc main.o ;运行./a.out

6> NSLog和printf的区别 

  ① NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数

  ② NSLog输出后会自动换行,printf输出后不会自动换行

  ③ 使用NSLog需要 #import <Foundation/Foundation.h>

  ④ 使用printf需要 #include <stdio.h>

7> #import的作用

  ① 跟#include一样,用来拷贝某个文件的内容

  ② 可以自动防止文件内容被拷贝多次,也就意味着头文件中不用加入下面的预处理指令了

  #ifndef    _STDIO_H_

  #define   _STDIO_H_

  #endif

8> Foundation框架的作用

  ① 开发OC、iOS、Mac程序必备的框架

  ② 此框架中包含了很多常用的API(应用编程接口)

  ③ 框架中包含了很多头文件,若想使用整个框架的内容,包含它的主头文件即可

    #import <Foundation/Foundation.h>

二、面向对象和面向过程的思想

  OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想

1.面向对象和面向过程的区别

1>以用电脑看电影为例

 a.面向过程

 ①打开电脑  ②播放电脑中的电影  ③关闭电脑

 b.面向对象

 ①电脑 (开机、播放电影、关机)

2> 区别

  ① 面向过程关注的是解决问题需要哪些步骤;面向对象关注的是解决问题需要哪些对象

  ② 没有开发经验很难感受到它们的区别,两种思想都能达到解决问题的目的,但是解决思路不一样

三、类和对象的关系

1.OC中的面向对象

1> OC中的类相当于图纸,用来描述一类事物。也就是,要想创建对象,先有类

2> OC利用类来创建对象,对象是类的具体存在

3> 面向对象解决问题应该是先考虑需要设计哪些类,再利用类来创建多少对象

2.如何设计类

  类的设计,只关注3样东西

1> 事物名称(类名):人(person)

2> 属性:身高(height)、年龄(age)

3> 行为(功能):跑(run)、吃饭(eat)

四、定义OC的类和创建OC对象

1.要拥有一个类,需要有两个步骤:类的声明和实现

1> 类的声明,声明对象的属性和行为

  @interface Car : NSObject

  {  

    int speed; //成员变量--速度

    int wheels; //成员变量--车轮个数

  }

  - (void) run;// 跑的行为;方法的声明

  @end

2> 类的实现,

  @implementation Car // 类的实现

  - (void) run // 方法的实现

  {

    NSLog(@"车跑起来了");

  }

  @end

2.创建对象

 int main()

 {

Car *c = [Car new]; // 创建车子对象,并且返回对象的地址,同时用指针保存对象地址

c->wheels = 3; //利用指针访问成员变量

c->speed = 300; //利用指针访问成员变量

[c run];// 对象调用方法,[行为执行者  行为名称];同时也是OC的消息机制,给指针所指向的对象发送一条消息

return 0;

 }

3.常见错误和注意点

1> 常见错误

  只有类的声明,没有类的实现

  漏了@end

  @interface和@implementation嵌套

  两个类的声明嵌套

  成员变量没有写在括号里面

  方法的声明写在了大括号里面

2> 注意点

  成员变量不能在{}中进行初始化、不能被直接拿出去访问

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

  成员变量、方法不能用static等关键字修饰,不要跟C语言混淆

  类的实现可用写在main函数的后面,主要在声明后面就行了

五、OC方法和函数的区别

1.常见错误

  OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在

  C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有

  C函数不能访问OC对象的成员

  易犯错误:方法有声明,但是实现的时候写成了函数

2.OC方法注意

  方法只有声明,没有实现(经典错误)

  方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)

  编译的时候:访问没有声明的成员变量直接报错,访问没有声明的方法,只是警告

六、自我总结

  语法是教我们如何更好的学习和运用一门语言,我们日常使用的语言如此,计算机语言亦是如此。所以语法使我们学习一门语言的基础也是根本,所以我们必须了解、掌握并熟练应用计算机语言语法,才能更好的编写出符合规范的好的应用程序。学习过程中,可能不明白这个语法为什么是这个样子,他为什么是这样规定的,我直接搞不明白,它完全不符合我的逻辑,我在学习中就遇到了这样和那样的语法问题,这是你不必纠结和计较他为何是这样,你只要知道他就是这样就可以了,你暂且这样记着,以后随着学习的不断深入和经验的不断丰富,你就会渐渐的明白这样做的好处,这也是我不断发现问题和解决问题的一个过程,希望对大家有帮助。

  

oc语言--语法的更多相关文章

  1. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  2. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  3. OC语言前期准备

    OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...

  4. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  5. OC语言-03-OC语言-三大特性

    一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...

  6. OC语言-02-OC语言-基础知识

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

  7. IOS基础之 (一) OC基础语法

    一 OC语法 1.关键字 基本上所有关键字都是以@开头,比如: @interface , @implementation, @end, @public, @protected, @private 2. ...

  8. iOS - OC 语言新特性

    前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 O ...

  9. 李洪强iOS开发之OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...

随机推荐

  1. SIEM

    http://en.wikipedia.org/wiki/Security_information_and_event_management http://en.wikipedia.org/wiki/ ...

  2. QProcess进程间双向通信

    记得以前写过Linux的C程序, 里面用popen打开一个子进程, 这样可以用read/write和子进程通讯, 而在子进程里则是通过从stdin读和向stdout写实现对父进程的通讯. QProce ...

  3. Qt HTTP请求同步调用

    在Qt中,进行HTTP就行现在官方提倡使用QNetworkAccessManager,其和QNetworkRequest和QNetworkReply配合使用,来完成,其是只支持异步的操作.最近使用QM ...

  4. 【转】Android出现“Read-only file system”解决办法

    原文网址:http://www.111cn.net/sj/android/44496.htm 下面介绍一篇Android出现“Read-only file system”解决办法 有碰到这类问题的朋友 ...

  5. c++ 12

    一.模板与继承 1.从模板类派生模板子类 2.为模板子类提供基类 二.容器和迭代器 以链表为例. 三.STL概览 1.十大容器 1)向量(vector):连续内存,后端压弹,插删低效 2)列表(lis ...

  6. BackgroundWorker用法

    BackgroundWorker主要用来提供后台运算服务(防止用户前台无响应等待),并提供服务进度的类: 代码如下: BackgroundWorker bgw = new BackgroundWork ...

  7. Javascript 解构的用处

    对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量. let { log, sin, cos } = Math; 上面代码将Math对象的对数.正弦.余弦三个方法,赋值到对应的变量上,使用起 ...

  8. iocomp控件的应用

    iocomp是一个强大的工业控件.适用于vb/vc/vs.net/Delphi/BCB(windows/linux).囊括了常见的工业控制控件,详见官网说明,源码能够到官网下载,也能够到我的资源库下载 ...

  9. scrapy使用crontab定时任务不能自动执行的调试

    在用crontab进行定时任务时,发现任务并没有执行.而手动bash yourshell.sh时可以正常的执行程序.以下是个人的解决流程. 一.将错误打印打out.log */10 * * * * b ...

  10. mysql 5.6 General error: 1364 Field mysql 严格模式导致

    问题:SQLSTATE[HY000]: General error: 1364 Field 解决方法:set global sql-mode=”NO_AUTO_CREATE_USER,NO_ENGIN ...