疯狂ios (李刚)
NSLOG函数是NS的前缀,Cocoa对其所有的函数、常量、类型前面都会增加NS;
@"string";NSString;
"string"; C语的字符串;
OC 加上 @ 用于区别 C语言
预处理两个特征
- 以 # 开头
- 必须位于程序的开头
项目结构
项目目录中: products 放编译后的文件
书籍地址
http://reader.epubee.com/books/mobile/00/00e7afd86ad220d348af388ca9688938/text00007.html
第二章 oc基础语法
2.2.6 限定词
在Objective-C程序中,常用的限定词有long、long long、short、unsigned和signed,下面将对其进行详细讲解
- long
- long long
- short
- unsigned 在Objective-C程序中,unsigned是一种最终限定符,当整数变量只用来存储正数时可以使用最终限定符。例如通过下面的代码向编译器声明,变量counter 只用于保存正值。使用限制符的整型变量可以专门存储正整数,也可以扩展整型变量的精度。
在Objective-C程序中,当将变量声明为long int、short int或unsigned int类型时,可以省略关键字int,为此变量unsigned int counter和如下声明格式等价。
unsigned counter;
- signed 在Objective-C程序中,限定词signed能够明确地告诉编译器特定变量是有符号的。signed主要用在char声明之前
2.2.7 基本数据类型小结
2.4 字符串
在Objective-C程序中,字符串常量是由@和一对双引号括起的字符序列。比如,@"CHINA"、@"program"、@"$12.5" 等都是合法的字符串常量。它与C语言中字符串的区别是增加了“@”。 字符串常量和字符常量是不同的量,主要有如下两点区别。 (1)字符常量由单引号括起来,字符串常量由双引号括起来。 (2)字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 在Objective-C 语言中,字符串不是作为字符的数组被实现的。在Objective-C中的字符串类型是NSString,它不是一个简单数据类型,而是一个对象类型,这是与C++语言不同的。我们会在后面的章节中详细介绍NSString。例如下面是一个简单使用NSString的例子。
NSLog(@"Programming is 牛!");
第3章 运算符和表达式
第6章 面向对象——类、对象和方法
6.3.1
在Objective-C中,类使用关键字@interface来定义。
6.4
使用@interface定义类
@interface 类名: 父类
/+ /- 在上述声明代码中,开头的“-”功能是通知Objective-C编译器该方法是一个实例方法。而与“-”对应的另外一种选择是“+”,表示类方法。
6.6 program具体实现部分
int main(int argc, const char * argv[]) {
@autoreleasepool {
Fraction * myFraction;
myFraction = [Fraction alloc];
myFraction = [myFraction init];
[myFraction setNumerator: 1];
[myFraction setDenominator: 3];
NSLog (@"The value of myFraction is:");
[myFraction print];
return 0;
}
Fraction myFraction; 定义一个名为myFraction的变量。 通过上述代码,表示myFraction是一个Fraction类型的对象,myFraction的功能是存储新的Fraction类的变量。myFraction前面的星号“”是必需的,“*”的功能是表示myFraction是对Fraction的一个引用(或者指针)。
oc语法
在 OC 语言中,绝大部分的关键字使用的 @ 符号开头。记住这是一个规则就好了。
import导入指令
“#”表示的是一个预处理指令。
这个指令的作用:将文件的内容在预编译的时候拷贝写指令的地方.
简单的原理:#import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含.
// .h 声明类
@interface className : NSObject
{
int age;
NSString *name;
BOOL isBoy;
}
@end
// .m 实现类
@implementation className{
}
@end
注意事项
- 在 .m 文件中定义的变量为私有变量,在其他的类是不能调用到的。
- 在 .m 中定义的方法在 .h 文件中如果没有定义就不能被外部的类所调用。
- 如果在 .h 文件中声明了一个方法,但是在 .m 文件中没有实现这个类,可编译通过,不可以运行。
类生成对象的方式
类生成对象在 OC 有好几种常见的方式,这里只阐述两种比较常用的方式:
// one
Person *person = [Person new] // java Person person = new Person()
// two
Person *person = [[Person alloc] init];
// 其中 alloc 表示分配内存空间, init 表示初始化成员变量。
// 这两种方式完全等价
// 属性调用
person->name; 与java person.name 一样
// 方法的调用
[person eat] // java person.eat()
// 有参数的方法
-(返回值类型)方法名称:(参数类型)参数名称1 : (参数类型)参数名称2
方法名称和参数数值之间以 “:” 表示分隔。
声明类定义
-(void)eat:(NSString *)name;
实现类
/*setName withAge withBoy withIsBoy 这个整体就是一个方法名称,至于为
*什么用 withXXX 这是 OC 书写的一种比较好的习惯吧。这些变量之间没有特殊的符号的定义,除了变量空格就好了。
*/
-(void)setName:(NSString *)name withAge:(int)age withIsBoy:(BOOL)isBoy{
_name = name;
_age = age;
_isBoy = isBoy;
}
类方法
对象的方法用 “-” 表示。类方法用 “+” 表示。其他的方式全部和对象方法一致。