iOS开发笔记系列-基础7(C语言特性)
Objective-C是C语言的扩展,因此,也具备很多C语言的基本特性,这里只罗列部分。
块(Blocks)
块是对C语言的一种扩展,它并未作为标准ANSI C所定义的部分,而是Apple添加到语言中的。它看起来很像函数,可以给它传递参数,它也具有返回值,与函数不同的是,块定义在函数或方法内部,并能够访问在函数或者方法范围内块之外的任何变量。一般来说,它可以访问到这些变量但是不能修改它们的值,有一个特殊的块修改器(由块前面含有两个下划线的字符组成)能够修改块内变量的值。块本身也能够作为参数传递给函数或方法。
块的其中一个优势在于能够让系统分配给其他处理器或应用的其他线程执行。
块是以插入字符“^”开头为标识的。后面跟的一个括号标识块所需要的参数列表。比如:
^(void){
....
}//没有分号
//这个块不接受参数
//也可以将块赋值给变量,如:
int (^myBlock)(void)=
^(void){
...
return somevalue;
};//赋值结束,有分号
块可以访问但是不能修改函数内块以外的变量,但是如果变量定义之前加了__block修改器,就可以了,比如函数内块以外的变量定义为
__block int foo=;
结构
除了数组之外,Objective-C还提供了另一种组合元素的工具,即结构。比如:
struct date
{
int month;
int day;
int year;
}
//
struct date today;//声明today变量为struct date类型
today.day=;//点符号是处理结构变量的特殊语法,用于访问结构成员
结构的初始化可以直接赋值,如:
struct date today={,,}//此时按顺序依次赋值
struct date today={}//只赋给第一个元素
struct date today={.month=,.day=,.year=}//指定顺序赋值
通常用typedef来改变结构体名称,使得在声明变量的时候不需要一直带着“struct”标识,比如:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
//声明变量时不需要再写struct了
CGPoint p;
下边的几种写法,也是合法的:
struct date
{
...
} date1,date2;
//
struct date
{
...
} date1={,,};
//
struct //省略结构名称
{
...
} date1={...};
//
struct
{
...
} dates[];//声明数组,元素为结构
指针
指针的工作方式是间接寻址的,它本身的值是一个地址,表示它所指向的变量的内存地址,声明时,通过在变量名前类型之后加上星号,如int *intPtr;这样intPtr就不能再被直接赋给int类型的值,而是内存地址,比如intPtr=&someValue;。
通过指针变量intPtr引用someValue的内容,可以使用间接寻址运算符(*),比如int x=*intPtr;
指针除了指向基本数据类型之外,还可以指向复杂的数据类型,如结构
struct s{...};
struct s sValue;
struct s *sPtr;
//
sValue.property=;
sPtr=&sValue;
(*sPtr).property=;
sPtr->property=;//这是结构指针的特殊运算符
函数指针
函数指针是指向函数的指针变量,此时需要知道函数返回值类型以及参数的数目和类型,比如要声明“指向返回int并且不带参数的函数的指针”,如下
int (*fnPtr) (void)
*fnPtr两侧的括号是必须的,此后可以用:fnPtr=loopFunc;(loopFunc是一个返回int且不带参数的函数)。
函数指针可以作为参数传递给其他函数,函数指针的另一个常见应用是建立分派表,函数本身不能保存在数组元素中,但是可以在数组中存储函数指针,就可以创建包含要调用的函数指针的表。
命令行参数
程序运行时开始执行的位置是main函数,直到main函数执行完,控制权返回给系统。调用main函数时,系统向它传递两个参数,第一个是argc(argument count),是一个整型值,第二个是argv(argument vector),是一个字符指针数组,长度为argc+1。
int main (int argc, char *argv[]){...}
argv数组的第一个元素是执行程序的名称指针,如果系统中没有程序名称,则为空串,数组的其他项指向由启动程序执行的命令行所指的值。数组argv中的最后一个指针arbv[argc]规定为空。
iOS开发笔记系列-基础7(C语言特性)的更多相关文章
- iOS开发笔记系列-基础1(数据类型与表达式)
学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...
- iOS开发笔记系列-基础2(类)
面向对象编程总是离不开类和对象的,Objective-C也不例外,不过Objective-C中的类还有一些自己的独特点. 类的声明和定义 在iOS开发中,类的声明与定义通常都是分开的,类得声明通常存放 ...
- iOS开发笔记系列-基础6(预处理程序)
预处理程序提供了一些工具,使用这些工具更易于开发.阅读.修改程序,也易于将程序移植到不同的系统中.又称为宏. #define #define语句的基本用途之一就是给富豪名称指定程序常量.比如: #de ...
- iOS开发笔记系列-基础5(分类和协议)
分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...
- iOS开发笔记系列-基础3(多态、动态类型和动态绑定)
多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方法所需要的代码,这使得它独立于其他的类 ...
- iOS开发笔记系列-基础4(变量与数据类型)
对象的初始化 对象的初始化方法一般都如下: -(id)init { self=[super init]; if(self){ ... } return self; } 这个方法首先会调用父类的初始化方 ...
- IOS科研IOS开发笔记学习基础知识
这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...
- 李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述
前面已经给大家介绍了iOS开发相关的一些基础知识,其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C+ ...
- iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
随机推荐
- linux lnmp编译安装
关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled ...
- 【JSP】三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- wap版和pc版的旋转js
<script type="text/javascript"> var evt = "onorientationchange" in window ...
- Delphi word 颜色
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, ...
- 《Python CookBook2》 第四章 Python技巧 对象拷贝 && 通过列表推导构建列表
(先学第四章) 对象拷贝 任务: Python通常只是使用指向原对象的引用,并不是真正的拷贝. 解决方案: >>> a = [1,2,3] >>> import c ...
- 向Window BCD 文件添加VHD开机启动项的相关笔记
******************************************************************************** * BCD_YE_MIN文件说明:(精 ...
- CSS:7个你可能不认识的单位
原文:7 CSS Units You Might Not Know About 众所周知,当使用CSS技术的时候,很容被一些奇异问题给困住.而当我们面对新的问题时,这会让我们处于非常不利的位置. 但是 ...
- Cloudera 建议使用 NTP 使 Hadoop 群集实现时间同步
主机的 NTP 服务未响应时钟偏差请求. 建议 这是主机运行状况测试,用于检查主机的系统时钟是否与其 NTP 服务器不同步.该测试能检查“ntpdc -c loopinfo”命令报告的主机时钟偏差绝对 ...
- [JS代码]如何判断ipad或者iphone是否为横屏或者竖屏 - portrait或者landscape
//判断横屏或者竖屏 function orient() { //alert('gete'); if (window.orientation == 0 || window.orientation == ...
- Nodejs与Net 和SQL 交互利器Edge.js
https://github.com/tjanczuk http://www.cnblogs.com/joylee/archive/2013/02/05/msnodesql.html edge.js这 ...