一.概述

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. Dynamics CRM 打开数据加密报错及修改用户邮件保存报错的解决方法

    在项目里会碰到在修改用户的电子邮件时报错的问题 然后跑到数据管理里打开数据加密又是报错 解决上述问题只需要做下数据库的更改即可,把标志位置1即可,记得要重启下IIS才能生效 SELECT [Colum ...

  2. 剑指Offer——记中国银行体检之旅

    剑指Offer--记中国银行体检之旅   11.23完成中国银行面试,当日回到学校.当天晚上8:39收到体检通知,自己真是又气又高兴啊.气的是自己刚从北京回来,接着又要去一次.高兴的是自己通过了面试. ...

  3. [csdn markdown]使用摘记三 简便快捷的流程图

    在线编写文字就可以实现复杂的流程图,再也不需要纠结了! 开始 操作流程 条件 结束 开始 st=>start: 开始 操作流程 st->op->cond 条件 cond=>co ...

  4. 2apt-get命令,deb包安装,源码安装

    1 安装卸载软件 更新源服务器列表 sudovi /etc/apt/sources.list 更新完服务器列表后需要更新下源 sudoapt-get update 更新源 sudoapt-get in ...

  5. java的断言(assert)

    概述 在C和C++语言中都有assert关键,表示断言.在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.在Java中,assert关键字是从JAVA SE 1.4 引入的,为了 ...

  6. qq安全原理

    故事总要有缘由,那么这个故事的缘由就是,当我以前写了一个获取其它进程密码框密码的时候(前几篇博客中有描述),我抱着试一试的心情去试探了一下能不能得到 QQ 的密码,当我抓到密码框的句柄,然后输入给程序 ...

  7. Nginx的负载均衡 - 最少连接 (least_conn)

    Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd 算法介绍 我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同. 这有个前提,就是每个请 ...

  8. Android简易实战教程--第二十三话《绚丽的菜单项》

    转载本博客请注明出处:点击打开链接  http://blog.csdn.net/qq_32059827/article/details/52327456 今天这篇稍微增强点代码量,可能要多花上5分钟喽 ...

  9. 1.3、Android Studio创建一个Android Library

    一个Android Library结构上与Android app模块相同.它可以包含构建一个app需要的所有东西,包括圆满,资源文件和AndroidManifest.xml.然而,并非编译成运行在设备 ...

  10. JVM常量池和八种基本数据及字符串

    迄今为止看到的对常量池和字符串最为透彻的解释,赞一个! 常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口等中的常量, ...