第一个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. python 在升级到python2.7之后安装相关插件

    # yum update # yum install centos-release-SCL # yum search all python27 在搜索出的列表中发现python27-python-de ...

  2. JavaScript中的陷阱(关于变量声明,函数)

    查看:http://www.css88.com/archives/5347#more-5347

  3. Java中关于日期类那些方法

                                                                       转载请注明出处http://blog.csdn.net/harry ...

  4. [Jobdu] 题目1369:字符串的排列

    题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个 ...

  5. 用platformio编写arduino程序

    哈哈,今天浏览arduino.cc官网,找到一个好东东,以后,在ubuntu下用终端编程在也不发愁了. platformio.org是一个物联网全能的IDE,甚至还贴心的提供了在命令行下编程的版本:p ...

  6. 批处理学习笔记8 - 深入学习For命令1

    for命令用途非常广,它分为4种 /d /r /l /f /l是类似高级语言的数值循环,在之前就说过,这篇就不说了: http://www.cnblogs.com/HONT/p/3155187.htm ...

  7. [sh]shell命令缩写

    命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户 rpm:redhat package manager 红帽子打包 ...

  8. 改善C#程序的建议9:使用Task代替ThreadPool和Thread

    一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互 ...

  9. Linux虚拟内存系统常用参数说明

    1.admin_reserve_kbytes    给有cap_sys_admin权限的用户保留的内存数量,默认值是min(free pages * 3%, 8MB).这些内存是为了给管理员登录和杀死 ...

  10. 腾讯云Ubuntu挂载硬盘空间

    第一.检查硬盘设备是否有数据盘 42G是系统盘那么就剩下了200G的剩余空间,那么下面我就把这200G挂载. 查询命令:  sudo fdisk -l 我们可以看到有200GB的数据盘没有挂载,看好前 ...