一.概述

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. 准备在CSDN知识库建立一个Ext JS的知识库

    CSDN近期正在建立一个知识库,目标是打造身边的技术百科全书 ,我觉得这创意挺好,就像stackoverflow一样,常见的问题在里面基本都有了,只要通过搜索就能找到所需的答案. 现在,大家对于Ext ...

  2. [Vim]vim使用笔记--分屏操作

    我们经常要打开多个文件,不同的窗口操作多个文件,分屏就很好用了. 1 命令模式下: :new,新建文件并分屏, 快捷键,Ctrl+W,然后马上按n键 :spilt 水平分屏,将当前屏分为两个,水平的. ...

  3. Unity UGUI图文混排(五) -- 一张图集对应多个Text

    继上一篇说的更新了一张图集对应多个Text的功能,为了节省资源嘛 这里,但是也没有舍弃之前的一个Text一个图集,因为我感觉应该两个都有用,于是我重新写了一个脚本 1.其实大体跟前面的都没变,解析标签 ...

  4. Struts 2 之拦截器

    拦截器概述 Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP(Aspect Oriented Progr ...

  5. linux的 压缩与解压 命令集

    bzip2压缩费时但效果好,而且支持hadoop的hdfs文件切分,gzip不行 bzip2 [-cdz] 文件名 -c :将压缩的过程输出到屏幕 -d :解压缩 -z :压缩 -# :压缩比的参数, ...

  6. ORACLE数据库学习之体系结构

     Oracle体系结构 ORACLE数据库体系结构决定了oracle如何使用网络.磁盘和内存.包括实例(instance),文件(file)和进程(process不包括后台进程)三部分. 实例:每 ...

  7. 从操作系统内核看Java非阻塞IO事件检测

    非阻塞服务器模型最重要的一个特点是,在调用读取或写入接口后立即返回,而不会进入阻塞状态.在探讨单线程非阻塞IO模型前必须要先了解非阻塞情况下Socket事件的检测机制,因为对于非阻塞模式最重要的事情是 ...

  8. 1.2、Android Studio为新设备创建一个模块

    模块为你的应用的源码.资源文件和app level设置(比如AndroidManifest.xml)提供了一个容器.每个模块可以独立的构建.测试和调试. 通过使用模块,Android Studio可以 ...

  9. shell的date日期循环方法:日期格式转时间戳计算,再将时间戳转回日期格式

    1,日期对象转时间戳current_day 2,计算增量的时间戳,即循环每步的增量one_day 3,循环体计算,日期变量加增量后重新赋值自己 4,时间戳转回日期格式后输出 current_day=2 ...

  10. Hessian源码分析--HessianProxy

    在上一篇博客 Hessian源码分析--HessianProxyFactory 中我们了解到,客户端获得的对象其实是HessianProxy生成的目标对象,当调用目标对象的方法时,会调用Hessian ...