您的位置:首页 > 移动开发 > Objective-C

Programming in Objective-C 学习笔记02

2016-03-10 18:44 417 查看

PART I —— The Objective-C Language (ch.5-8)

for循环过程:

Step1:index variable赋初值

Step2:循环条件判断 → 执行循环体前先做一次判断

true则执行循环体

false则直接跳出循环,继续程序

Step3:计算更新index variable的表达式 loop expression

返回Step2

格式化字符串
%2i
——表示右端对齐的2位整数;左端对齐
%-2i


scanf(格式化字符串,&变量)


字符串是String类型,不是NSString对象(不加@)

第二个参数用于指定用户键入的值存储在哪里(“&变量”是指向变量内存空间的指针)

当使用scanf输入 char型字符 时,最好在格式化字符串 %c之前加个空格 (“ %c”) —— 这样可以让scanf跳过“空白字符”(如回车,制表符……),避免读入不想要的字符

for循环的变体:多个index variables;fast enumerations快速遍历(ch.15)

for循环适合的情景:预先确定循环次数的循环;initial expression, looping expression, and looping condition都使用相同的变量

字符测试最好使用standard library提供的方法,避免内部表示问题

相关库文件:ctype.h

方法:islower(char ch)是否为小写;isupper(char ch)是否为大写;isdigit(char ch)是否为数字(0-9)……是则返回非0值,否则返回0(返回值类型int)

条件运算符的一种特殊情形(non-ANSI extension):
condition?: expression


如果condition的结果是真,则运算的值是计算condition的结果;若condition是假,则值为计算expression的结果

condition? condition: expression
对比:前者condition计算一次,后者condition计算两次

Think of the interface file(.h文件) as containing the public information about a class—the information you share with the users of the class. In contrast, the implementation section(.m文件) contains the private information—the instance variables and the actual code.

(In fact, the code may actually be stored someplace else, such as in a framework or library.)

在objective-c 2.0中的新特性:自动生成setter和getter方法(统称accessor methods)

首先要在interface部分使用@property声明属性(总是与实例变量重名,但非必须)

然后要在implementation部分使用@synthesize,给属性加上accessor methods

注:

优点:更有效率,也能更安全地运行在多核多线程环境中

如果省略@synthesize部分,编译器会自动创建一个相关联的实例变量,以“属性名”为变量名(则@implementation部分中所有使用属性名的地方都要替换为“属性名”)

不要使用new, alloc, copy, init作为属性名的开头

当使用对象做为方法的参数时,参数类型是
(Class名 *)


返回对象(引用)时,接收的变量不用alloc和init而直接获取对象;对象的alloc和init已经在method的执行中完成。

#import和@class:在@interface部分使用@class告诉编译器这是一个class名,提高编译效率(不必导入整个文件),而如果要使用这个class中定义的属性和方法,需要在@implementation部分使用#import

特殊情形:若两个class彼此之间互相依赖,用#import会引发编译错误,要用@class

对象类型的实例变量不要用@synthesize合成(@synthesize自动生成的accessor方法只是复制指向对象的引用,而不是对象),单独写setter和getter,同样要注意复制对象

override:在subclass中对superclass的方法修改,方法名,参数,返回值类型都相同

多个class中override的方法,编译器选择在receiver所属的class中查找

使用subclass的情形
4000


通过增加方法和(或)实例变量,扩展superclass的功能

对superclass进行细化(如在图形class的基础上细化得到矩形class、椭圆class……)

通过override改变class的default behavior

abstract class:仅仅是用于方便创建子类的类(定义实例变量和方法,但不会创建实例)

abstract class有很多concrete subclasses,总称为簇(a class cluster)。这些子类是private的,不能直接访问,只能通过abstract class中定义的公共接口访问。创建对象也是使用abstract class,alloc和init由其concrete subclass解决,不用coder处理

举例:NSNumber……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c