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名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
随机推荐
- Mac下开发常用目录
1:Snippets Xcode 代码段的文件表示 ~/Library/Developer/Xcode/UserData/CodeSnippets/ 2: Services 可以添加workf ...
- 【Unity3D】自动寻路(Nav Mesh Agent组件)
1.首先添加场景模型 2.为场景模型(寻路路径)添加NavMesh渲染,操作:Windows->Navigation->勾选Navigation Static选项->不勾选Gener ...
- Solr与Mysql简单集成
Solr与Mysql数据库的集成,实现全量索引.增量索引的创建. 基本原理很简单:在Solr项目中注册solr的DataImportHandler并配置Mysql数据源以及数据查询sql语句.当我们通 ...
- MySQL row模式binlog复制原理
http://www.360doc.com/content/14/1107/14/12904276_423333021.shtml
- Unable to execute dex: method ID not in [0, 0xffff]: 65536
http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html
- Core Java 学习笔记——1.术语/环境配置/Eclipse汉化字体快捷键/API文档
今天起开始学习Java,学习用书为Core Java.之前有过C的经验.准备把自己学习这一本书时的各种想法,不易理解的,重要的都记录下来.希望以后回顾起来能温故知新吧.也希望自己能够坚持把自己学习这本 ...
- hadoop-1.1.2集群搭建
Hadoop安装分为三种不同模式: 本地模式:hadoop在运行时,不使用hdfs,而是使用linux操作系统的文件系统.(默认hadoop就是本地模式) 伪分布模式:在一个节点上运行hadoop(指 ...
- Codevs No.1052 地鼠游戏
2016-05-31 18:22:32 题目链接: 地鼠游戏 Codevs No.1245 题目大意: 打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s ...
- git使用中遇到的常见问题
.gitignore 中添加的文件不能被忽略掉 这是因为我们误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添 ...
- public, protected, private, internal, protected internal简析
public是可访问权限最高的,比如姓名,每个人都可以知道别人的姓名,这个不是什么秘密 protected的访问权限要低些,只有子类才可以访问得到父类的protected属性.就好像老子的财产只有儿子 ...