一.概述

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. iOS开源加密相册Agony的实现(一)

    简介 虽然目前市面上有一些不错的加密相册App,但不是内置广告,就是对上传的张数有所限制.本文介绍了一个加密相册的制作过程,该加密相册将包括多密码(输入不同的密码即可访问不同的空间,可掩人耳目).Wi ...

  2. Linux内核中的有关Page的算法

    static inline int get_order(unsigned long size) { int order; size = (size-1) >> (PAGE_SHIFT-1) ...

  3. Android Multimedia框架总结(二十)MediaCodec状态周期及Codec与输入/输出Buffer过程(附实例)

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53183718 前言:前面几节都是 ...

  4. XMPP 测试工具

    XMPP 测试工具(金庆的专栏 2016.10)XMPP的客户端Pidgin有个Debug Window, 可以显示所有发送和接收的xml节.但是无法发送任意的自定义节.<XMPP高级编程-使用 ...

  5. 为什么选择C++

    为什么选择C++,怎么不选其它语言呢? 为什么不选择C? 因为C++比C简单点~ 为什么不选择C#? 因为C++可以在所有操作系统上使用. 为什么不选择JAVA? 因为C++的性能好一点~ 还有其他的 ...

  6. PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes

    http://blog.csdn.net/pipisorry/article/details/52469064 独立性质的利用 条件参数化和条件独立性假设被结合在一起,目的是对高维概率分布产生非常紧凑 ...

  7. Cocos2D在新版Swift中常量枚举值引用代码的修改

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中是无法直接给一个CCB文 ...

  8. XML Schema

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...

  9. javascript之DOM对象

    document方法 document.createElement(Tag) :创建一个html标签对象 document.getElementById(ID) :获得指定ID值的对象 documen ...

  10. Libgdx教程目录

    Libgdx教程 Note:本教程用的Libgdx 1.9.2版本,在教程更新完毕之前应该不会更新版本.之前的博客中也发表过Libgdx的内容,不过当时都从别人那里拷贝的,因此现在想做一个Libgdx ...