一.概述

1.基本上所有关键词@开头
2.字符串以@开头,如@“Hello”
3.基本数据类型 char int float double BOOL(YES\NO)
4.空为nil
5.注释同C语音
6.屏幕输出 NSLog(@“String”); NSLog(@“age is %i”,27);
7 C语言.连接是将所有.o文件连接起来
8.OC语言.m到.o再到.out

二.第一个OC程序,命令行编译

1.使用命令touch xx.m创建OC文件,然后使用cc -c xx.m生成.o文件,最后使用cc xx.o生成xx.out,./xx.out即可运行
2.NSLog自动换行
3.如果不知道头文件,先编译一下,会提示缺少的头文件
4.OC使用#import代替#include
   #import的用途:1.同include的用途,拷贝文件内容 2.可以防止文件内容被重复拷贝
这样可以省去
#ifndef ABC
#define ABC
#endif
5.如果使用了NSLog函数,则用到了Foundation框架的NSObjCRuntime.h,使用链接指令时不会自动链接OC的框架,因此要自行声明框架的引入使用  cc xx.o -framework Foundation,即可生成a.out
6.想要包含整个框架,包含主头文件:例如Foundation框架的主头文件为<Foundation/Foundation.h>

三.多个.m文件的链接


one.m

#import "two.h"

int main(){

test();

;

}

two.h

void test();

two.m

#import <Foundation/Foundation.h>

void test(){

NSLog(@"Use test.");

}

链接:cc one.o two.o -framework Foundation

C语言程序可以和M文件混用

cc xx.m xx.c可以编译链接一起来

四.BOOL类型


BOOL类型全大写,取值为YES(1)、NO(0)
BOOL的类型本质 signed char
#define YES (BOOL)1
#define NO (BOOL)0

五.面向对象与面向过程

Procedure Oriented PO 面向过程
Object Oriented OO 面向对象
OOP 面向对象编程

六.类的设计规范


1.类名:
首字母大写,不能有下划线,每个单词的首字母大写(驼峰标识)

七.类的设计与实现


1.类的声明:
用来声明对象的属性和行为
#import <Foundation/Foundation.h>

@interface ClassName : NSObject{
}
@end 

2.类的实现:
@implementation ClassName

@end

例如
@interface Car{
@public //声明访问权限
int wheels;
int speed;
}
@end

@implementation Car

@end
注意new出来的是地址,应该用指针
int main(){
Car *p = [Car new];
return 0;
}

OC的方法与函数不同,用-号开头,小括号仅用于括住数据类型
例如下面实现了一个无参方法run

#import <Foundation/Foundation.h>

@interface Car : NSObject{

@public //默认是@protected

int wheels;

int speed;

}

- (void)run;

@end

@implementation Car

- (void)run{

NSLog(@"The car is running");

}

@end

int main(){

Car* p = [Car new];

p->wheels = ;

p->speed  = ;

//消息机制,给指针p所指向的对象发送一条run消息

[p run];

;

}

需要注意的是,方法的调用时用的是指针,实质是消息机制,即给指针所指向的对象发出一条执行相应方法的消息

注意指针赋值只是把地址拷贝,如p2=p,p2可以改变p所指向的对象

每个对象内部都有一个isa指针,它指向对象所对应的类,所有对象共用一个方法列表

没有指针指向的OC对象不会被自动销毁。

成员变量不能写static,不能在定义时初始化。

如果类的定义在main之后,要先声明。

八.OC函数与方法的区别

方法开头写-,类型用( ),其余不用( ).
方法一定要写在@implementation与@end之间,函数写在哪里都可以,写在关键词之间也没问题。
方法依赖于对象存在,而函数是独立的。

九.类的合理设计


枚举类型的值应该以枚举名称开头,可以用驼峰标识。

结构体的一次性赋值只能在定义时使用(大括号赋值)。

任何OC对象都是用指针来指的。

OC方法中,一个参数对应一个冒号,冒号后跟参数

例如power2函数

- (double)power2 : (double)num;

实现:

- (double)power2 : (double)num{

return num * num;

}

调用:

[c add : 1 : 2];

多个参数继续用冒号连接。

写法规范:后面的参数可以在冒号前加标签

- (double)sumWithNum1 : (double)num1 andNum2: (double)num2;

实现:

- (double)sumWithNum1 : (double)num1 andNum2: (double)num2{

return num1 + num2;

}

调用:

[c sumWithNum1 :  andNum2 : ]

增强了可读性。

冒号也是方法名的一部分!

例如上面的三参数函数的名称为 sumWithNum1 : andNum2:

快速定位:


OC语言(一)的更多相关文章

  1. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  2. OC语言前期准备

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

  3. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  4. OC语言@property @synthesize和id

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

  5. OC语言构造方法

    OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...

  6. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  7. OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  8. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

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

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

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

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

随机推荐

  1. javaweb异常提示信息统一处理(使用springmvc,附源码)

    一.前言 后台出现异常如何友好而又高效地回显到前端呢?直接将一堆的错误信息抛给用户界面,显然不合适. 先不考虑代码实现,我们希望是这样的: (1)如果是页面跳转的请求,出现异常了,我们希望跳转到一个异 ...

  2. ERROR: Cannot change version of project facet Dynamic Web Module to 3.0?

    Issue: When you create web app in eclipse with maven configuration, you may get following error. Can ...

  3. SQLite 创建表(http://www.w3cschool.cc/sqlite/sqlite-create-table.html)

    SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...

  4. ProgressBar的简单使用

    当我们的应用在进行耗时操作时,显示一个进度条呈现给用户,让用户知道当前进度是一个很好的体验,接下来我们就来简单了解下ProgressBar(本文主要针对初学者,大神可以绕开啦),先看效果图: 进度条P ...

  5. Android简易实战教程--第二十七话《自定义View入门案例之开关按钮详细分析》

    转载此博客请注明出处点击打开链接       http://blog.csdn.net/qq_32059827/article/details/52444145 对于自定义view,可能是一个比较大的 ...

  6. Android-MVVM架构-Data Binding的使用

    项目整体效果: Awesome-Android-MVVM 什么是MVVM, 为什么需要 MVVM? 如何在Android中使用Data Binding实现MVVM架构? 什么是MVVM , 为什么需要 ...

  7. 查看linux的进程到底用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 一般的命令有    (1). ps aux:      其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存.          ...

  8. android 使用Vysor投影到电脑

    有没有好的投影软件可以将android屏幕投影到电脑,当然这种很多,比如360就自带了投影功能,小米盒子也可以(不过貌似只能支持到4.4版本),今天要说的是Vysor,google的一款投影软件. V ...

  9. [GitHub]第六讲:开源项目贡献流程

    Github 是目前世界上最大的开源项目的托管交流平台.贡献开源项目的流程也是 Github 全力支持的,也一样是遵循 Github Flow,虽然跟前面团队合作流程会有一点差别.在团队内部,大家都是 ...

  10. XML解析之SAX解析过程代码详解

    上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; impo ...