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的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中使用NSString类操作字符串的方法小结
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- 全面解析Objective-C中的block代码块的使用
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- 以实例讲解Objective-C中的KVO与KVC机制
- 简介Objective-C解析XML与JSON数据格式的方法
- 浅析Objective-C中分类Category的使用
- 理解Objective-C的变量以及面相对象的继承特性
- 简单讲解Objective-C的基本特性及其内存管理方式
- Objective-C处理空字符串和页面传值及自定义拷贝
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解