iOS开发笔记系列-基础7(C语言特性)

  Objective-C是C语言的扩展,因此,也具备很多C语言的基本特性,这里只罗列部分。

块(Blocks)

  块是对C语言的一种扩展,它并未作为标准ANSI C所定义的部分,而是Apple添加到语言中的。它看起来很像函数,可以给它传递参数,它也具有返回值,与函数不同的是,块定义在函数或方法内部,并能够访问在函数或者方法范围内块之外的任何变量。一般来说,它可以访问到这些变量但是不能修改它们的值,有一个特殊的块修改器(由块前面含有两个下划线的字符组成)能够修改块内变量的值。块本身也能够作为参数传递给函数或方法。

  块的其中一个优势在于能够让系统分配给其他处理器或应用的其他线程执行。

  块是以插入字符“^”开头为标识的。后面跟的一个括号标识块所需要的参数列表。比如:

^(void){
    ....
}//没有分号
//这个块不接受参数
//也可以将块赋值给变量,如:
int (^myBlock)(void)=
^(void){
  ...    return somevalue;
};//赋值结束,有分号

  块可以访问但是不能修改函数内块以外的变量,但是如果变量定义之前加了__block修改器,就可以了,比如函数内块以外的变量定义为

__block int foo=1;

结构

  除了数组之外,Objective-C还提供了另一种组合元素的工具,即结构。比如:

struct date
{
int month;
int day;
int year;
}
//
struct date today;//声明today变量为struct date类型
today.day=1;//点符号是处理结构变量的特殊语法,用于访问结构成员

  结构的初始化可以直接赋值,如:

struct date today={1,2,2001}//此时按顺序依次赋值
struct date today={1}//只赋给第一个元素
struct date today={.month=1,.day=2,.year=2001}//指定顺序赋值

  通常用typedef来改变结构体名称,使得在声明变量的时候不需要一直带着“struct”标识,比如:

struct CGPoint {
 CGFloat x;
 CGFloat y;
};
typedef struct CGPoint CGPoint;

//声明变量时不需要再写struct了
CGPoint p;

  下边的几种写法,也是合法的:

struct date
{
...
} date1,date2;
//
struct date
{
...
} date1={1,2,2001};
//
struct  //省略结构名称
{
...
} date1={...};
//
struct
{
...
} dates[10];//声明数组,元素为结构

指针

  指针的工作方式是间接寻址的,它本身的值是一个地址,表示它所指向的变量的内存地址,声明时,通过在变量名前类型之后加上星号,如int *intPtr;这样intPtr就不能再被直接赋给int类型的值,而是内存地址,比如intPtr=&someValue;。

  通过指针变量intPtr引用someValue的内容,可以使用间接寻址运算符(*),比如int x=*intPtr;

  指针除了指向基本数据类型之外,还可以指向复杂的数据类型,如结构

struct s{...};
struct s sValue;
struct s *sPtr;
//
sValue.property=1;
sPtr=&sValue;
(*sPtr).property=2;
sPtr->property=3;//这是结构指针的特殊运算符

  函数指针

  函数指针是指向函数的指针变量,此时需要知道函数返回值类型以及参数的数目和类型,比如要声明“指向返回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]规定为空。

时间: 2024-08-03 11:25:33

iOS开发笔记系列-基础7(C语言特性)的相关文章

iOS开发笔记系列-基础3(多态、动态类型和动态绑定)

多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方法所需要的代码,这使得它独立于其他的类定义.这是因为Objective-C的运行时系统在执行方法时知道消息的接收者是哪个类的对象,它总是携带有关“一个对象属于哪个类”这样的信息,该信息能使系统在运行时做出决定,而不是在编译时. 动态绑定和id类型 id数据类型是一种通用的对象类型,可以用来存储属于任何类的对象.当使用id类型的时候,程序

iOS开发笔记系列-基础5(分类和协议)

分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式,并且不需要访问类的源代码,也无须创建子类. 比如: //SomeClass+MathOps.h #import "SomeClass.h" @interface SomeClass (MathOPs) -(SomeClass *) add: (SomeClass *)s; -(SomeCl

IOS科研IOS开发笔记学习基础知识

这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollView; tableScrollView=[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];//窗体大小 tableScrollView.contentSize=CGSizeMake(640, 480);//设置内容视图的大

李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述

前面已经给大家介绍了iOS开发相关的一些基础知识,其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C++.Objective-C都是以C语言为基础,从C语言衍生出来的.从这讲开始,我们就暂时抛开iOS相关的知识,沉下心来学习传说中的C语言.正式学习之前,先提醒一句:学习一门语言的语法是比较枯燥的事,很像是在学习1+1等于几,不可能说,学习C语言语法过程中就能马上做

PHP开发笔记系列(一)-PDO使用

之前一段时间,开始了php的研究,看了关于PDO的一些资料,发现不错,整理和总结一下,作为开发笔记,留待日后使用,<PHP开发笔记系列(一)-PDO使用>. PDO是PHP Data Objects的简称,是一种数据库访问抽象层.PDO是用于多种数据库的一致接口.类比的说,PDO做的事情类似于JAVA中的持久层框架(Hibernate.OpenJPA)的功能,为异构数据库提供一个统一的编程接口,这样就不必再使用mysql_*.pg_*这样的函数,也不必再写自己的"GenericDAO

iOS开发UINavigation系列二——UINavigationItem

iOS开发UINavigation系列二--UINavigationItem 一.引言 UINavigationItem是导航栏上用于管理导航项的类,在上一篇博客中,我们知道导航栏是通过push与pop的堆栈操作来对item进行管理的,同样,每一个Item自身也有许多属性可供我们进行自定制.这篇博客,主要讨论UINavigationItem的使用方法. UINavigationBar:http://my.oschina.net/u/2340880/blog/527706. 二.来说说UINavi

IOS开发笔记-百度地图(第三方库)

最近做了百度地图,在导入SDK后遇到了一些问题 编译错误: linker command failed with exit code 1 (use -v to see invocation) 想了很多办法,查了很多资料,最后终于解决. 可能原因: 1. 有重复的.m文件,或者未导入 解决办法:有重复的删除即可 在工作左边导航栏Target-->Build Phases-->compile Sources中,第三库库的所有.m文件都添加到里面 2.Valid Architectures 的值 在

iOS开发UINavigation系列三——工具栏UIToolBar

iOS开发UINavigation系列三--工具栏UIToolBar iOS中除了UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也有UIBarButtonItem按钮,在前两篇博客中,对导航栏和导航项都进行的讨论,地址如下: UINavigationBar:http://my.oschina.net/u/2340880/blog/527706 UINavigationItem:http://my.oschina.

iOS开发UINavigation系列一——导航栏UINavigtionBar

iOS开发UINavigation系列一--导航栏UINavigtionBar 一.导航栏的使用 在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigationBar,实际上,我们也可以在不使用导航控制器的前提下,单独使用导航栏,在UINavigationBar中,也有许多我们可以定制的属性,用起来十分方便. 二.UINavigationBar的创建和风格类型 导航栏继承于UIView,所以我们可以像创建普通视图那样创建导航栏,比如我们创建一个高度为80的导航栏,将其放