第一个OC程序
第一个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程序的更多相关文章
- [OC笔记]我的第一个OC程序
这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...
- IOS开发——01_第一个OC程序
本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...
- 【Objective-C】04-第一个OC程序解析
说明:这个Objective-C专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序猿,可以高速上手Objective-C.假设你还没有编程经验,或者对Objective-C.iOS开发 ...
- 第一个OC类、解析第一个OC程序
01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...
- 手动创建第一个OC程序
手动创建第一个OC程序 创建一个文件夹,文件夹内创建一个a.m的OC源文件,并编辑 之前说过,OC是完全兼容C语言的,那么我们先写个下面的程序尝试一下 #include<stdio.h> ...
- 【Objective-C】03-第一个OC程序
一.打开Xcode,新建Xcode项目 二.选择最简单的命令行项目 因为我们只是学习OC语法,还未正式进入iOS开发,所以选择命令行项目即可 三.输入项目名称,选择Foundation框架进行创建项目 ...
- 02第一个OC程序
一.打开XCode4.6.3,新建项目 二.选择Application下的命名行项目 三.输入项目名称,选择Foundation框架创建项目,点击Next 四.二话不说.点击Run.启动我们创建的项目 ...
- 我曾经的第一个OC程序
一. OC简介 C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS X平台和iOS平台的应用程序 二. OC语 ...
- 05_传智播客iOS视频教程_第一个OC程序
Cocoa Application开发的是带界面的程序. OC是完全兼容C语言的,但是C语言里面是不能写OC的东西的. OC和C的第一个区别,就是源文件的后缀名的区别.OC程序的源文件的后缀名是.m, ...
随机推荐
- [hihoCoder] #1158 : 质数相关
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被称为质数相关,是指S中 ...
- 苹果开发小记(一):NSString 的比较用法
转自:http://blog.sina.com.cn/s/blog_897dd7be0100teh6.html 做了几个月的苹果,很多的思想方法都可以遵循一定规律来做的.NSString 比较字符串, ...
- [转载] C++的那些事:你真的了解引用吗
我转载了roony的一篇文章 C++的那些事:你真的了解引用吗 以备以后可以查到. 一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1.引用就是一个对象的别名. 2.引用不是值不占 ...
- pause和resume
CCSet *m_pPausedTargets;类的成员变量 void CCNode::schedule(SEL_SCHEDULE selector, float interval, unsigned ...
- 移动开发UI库
参考链接:http://www.cnblogs.com/edobnet/archive/2012/08/17/2643573.html 自己总结: jquery 的移动开发UI库 http://jq ...
- hdoj1010 Temperor of the bone
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- ny488 素数环
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简便起 ...
- MySQL PLSQL Demo - 002.变量定义、赋值
drop procedure if exists p_hello_world; create procedure p_hello_world() begin declare v_number int; ...
- Spark的基本说明
1.关于Application 用户程序,一个Application由一个在Driver运行的功能代码和多个Executor上运行的代码组成(工作在不同的节点上). 又分成多个Job,每个Job由多个 ...
- gulp入门与一些基本设置
这里是gulp入门的一些操作,实现了编译sass文件.压缩.合并.添加版本号等基本功能. 友情提示,如果npm出现无法下载可以安装 cnpm.在安装完Nodejs 后 npm install cnpm ...