第一个OC程序源码如下:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
@autoreleasepool{ NSLog(@"Hello,World!");
}
return ;
}

下面对这个输出"Hello,World!"的OC程序做下介绍:

#import

#import是GCC编译器提供的,可以保证头文件只被包含一次。

#import <Foundation/Foundation.h>语句告诉编译器查看Foundation框架中的Foundation.h头文件。

框架

框架是一种聚集在一个单元的部件集合,包含头文件,库,图像,声音文件等。

苹果公司将Cocoa,Carbon,QuickTime和OpenGL等技术作为框架集提供。Foundation框架是处理用户界面之下的层(layer)中的特性,例如数据结构和通信机制。

每个框架都是一个重要的技术集合,通常包含数十个甚至上百个头文件。每个框架都有一个主头文件,它包含了该框架中的其它各个头文件。通过使用#import导入主头文件,可以使用该框架中所有的部件。

Main函数

Main函数的两个参数,argc表示参数(包括程序名)个数,argv是一个参数指针数组,并且每一个指针都指向一个字符串,表示一个参数。argv[0]就是程序名,argv[1]才是第一个参数。

NSString *str = [NSString stringWithUTF8String:argv[0]];
NSLog(@"%@",str);

输出如下:

NSLog函数

NSLog(@"Hello,World!");

向控制台输出”Hello,World!”,类似与C语言中的printf()。NSLog()接受一个字符串作为其第一个参数,该字符串可包含格式说明符(如%d)。

@符号是OC在标准C语言基础上添加的特性之一,双引号中的字符串前有一个@符号,表示引用的字符串应该作为Cocoa的NSString元素来处理。

\n 表示换行

\t 表示Tab功能

%i 表示整数

%f 表示float

%@ 表示字符串

%d 表示double

%c 表示字符char

@autoreleasepool 自动释放池

@autoreleasepool方便快捷管理内存的方案, 自动释放池是OC里面的一种内存回收机制,一般可以将一些临时变量添加到自动释放池中,统一回收释放,当自动释放池销毁时,池里面的所有对象都会调用一次release,也就是计数器会减1,但是自动释放池被销毁了,里面的对象并不一定会被销毁。

OC对象发送一条autorelease消息,就会把这个对象添加到最近的自动释放池中也就是栈顶释放池中, Autorelease实际上是把对release的调用延迟了,对于每一次autorelease,系统只是把对象放入了当前的autorelease pool中,当pool被释放时,pool中所有的对象都会被调用release。

自动释放池可以自动追踪需要延迟释放的对象。

将对象添加自动释放池维护的列表中:[object autorelease];。

当自动释放池本身销毁时,池子里的所有的对象对会release。

使用来自Foundation,UIkit,AppKit等框架中的类是,也需要先创建自动释放池,因为来自这些框架的类会创建并返回自动释放的对象。

创建自动释放池

//MRC

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init];

…//需要释放的对象

[pool realse]

//ARC

@autoreleasepool
{ …//需要释放的对象 }

使用自动释放池

自动释放池可以创建多个

多个自动释放池形成栈式结构

对象放入最近的栈顶的自动释放池

不要把所有的对象都放入自动释放池,只放需要延迟释放的对象

对于大量占有内存的对象,创建就近的自动释放池,保证它快速得到销毁

以上就是对一个简单的完整的OC程序的分析,如有错误,请批评指正。

第一个OC程序的更多相关文章

  1. [OC笔记]我的第一个OC程序

    这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...

  2. IOS开发——01_第一个OC程序

    本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...

  3. 【Objective-C】04-第一个OC程序解析

    说明:这个Objective-C专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序猿,可以高速上手Objective-C.假设你还没有编程经验,或者对Objective-C.iOS开发 ...

  4. 第一个OC类、解析第一个OC程序

    01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...

  5. 手动创建第一个OC程序

    手动创建第一个OC程序 创建一个文件夹,文件夹内创建一个a.m的OC源文件,并编辑 之前说过,OC是完全兼容C语言的,那么我们先写个下面的程序尝试一下 #include<stdio.h> ...

  6. 【Objective-C】03-第一个OC程序

    一.打开Xcode,新建Xcode项目 二.选择最简单的命令行项目 因为我们只是学习OC语法,还未正式进入iOS开发,所以选择命令行项目即可 三.输入项目名称,选择Foundation框架进行创建项目 ...

  7. 02第一个OC程序

    一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...

  8. 我曾经的第一个OC程序

    一. OC简介 C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS X平台和iOS平台的应用程序 二. OC语 ...

  9. 05_传智播客iOS视频教程_第一个OC程序

    Cocoa Application开发的是带界面的程序. OC是完全兼容C语言的,但是C语言里面是不能写OC的东西的. OC和C的第一个区别,就是源文件的后缀名的区别.OC程序的源文件的后缀名是.m, ...

随机推荐

  1. object-c 获得目录(包括子目录)下所有文件和文件夹路径

    void getAllPathNameInDirectory(vector<string>&filePathList,vector<string>&direct ...

  2. [Jobdu] 题目1510:替换空格

    题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测 ...

  3. 模拟多级复选框效果的jquery代码

    jquery做了个多级复选框的效果,代码总共就20+行就over了. 我又想用js来做一个看看,才写了几个方法就写不动了,兼容性要考虑很多,而且代码量直线上升. 主要分享下jquery的这个效果的实现 ...

  4. SQL中AND与OR的优先级

    突然发现,把基础给忘了,AND的优先级大于OR,试验如下: Oracle --Y ; --Y ) ; --No value ); 附,Oracle文档: http://docs.oracle.com/ ...

  5. JQuery中eq()和get()的区别

    众所周知,eq()方法返回的是一个JQuery对象,也就是[object Object]; get()方法返回的是DOM对象组成的数组,也就是[object HTMLLIElement]; 我们用一个 ...

  6. const在c和c++中地位不同

    先测试C语言的const: #include<stdio.h> int main() { ; //等价于 //int const a = 10; //a = 11;//err ; cons ...

  7. MyEclipse SVN 下面切换用户的解决方案

    configuration\org.eclipse.core.runtime\.keyring 删除MyEclipse下面的文件. 或者修改服务器端的用户密码.

  8. nginx的centos和rhel的yum配置安装

    Official Red Hat/CentOS packages To add NGINX yum repository, create a file named /etc/yum.repos.d/n ...

  9. firewalled centos7

    zone绑定网卡 firewall-cmd --zone=internal --add-interface=ens192 --permanent firewall-cmd --permanent -- ...

  10. Hibernate- hibernate二级缓存

    原文地址:http://www.iteye.com/topic/18904 很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了. ...