一.概述

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. CSAPP缓冲区溢出攻击实验(下)

    CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将g ...

  2. Tomcat7源码环境搭建

    一.下载Tomcat7源码 从官网上下载Tomcat源码,   http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.70/src/apache-t ...

  3. How to code like a hacker

    We are coding. Are we engineers? Are we programmers? Are we coder? No, I want to be a hacker! Many g ...

  4. 查看oracle数据库的连接数以及用户 (转:http://blog.itpub.net/24558279/viewspace-752293/)

    select2.查询oracle的并发连接数4select3.查看不同用户的连接数6select4.查看所有用户:8select5.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):10sel ...

  5. Dynamics CRM2013 Odata的filter中含有日期字段时遇到的一个奇葩问题

    在使用Odata拼写filter时我们一般都用工具,因为手写是件极不靠谱且错误率极高的事,下图是我用query designer拼出来的一个filter,因为时间是参数,所以在拷贝出下面这段filte ...

  6. Spring之Enterprise JavaBeans (EJB) integration

    原文地址:需要FQ https://translate.google.com/translate?hl=zh-CN&sl=zh-CN&tl=zh-CN&u=http%3A%2F ...

  7. 【java虚拟机系列】java虚拟机系列之JVM总述

    我们知道java之所以能够快速崛起一个重要的原因就是其跨平台性,而跨平台就是通过java虚拟机来完成的,java虚拟机属于java底层的知识范畴,即使你不了解也不会影响绝大部分人从事的java应用层的 ...

  8. (一〇八)iPad开发之横竖屏适配

    在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题:而竖屏时Dock应该比较窄,只显示图标不现实按钮标题. iPad比 ...

  9. 从二进制数据流中构造GDAL可以读取的图像数据

    在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...

  10. Android面试题目总结

    1.java 基础题,输入结果是什么? public static void main(String[] args) { String str = new String("abc" ...