1. Objective-C是基于C语言的,所以完全兼容C语言,可以开发Mac OS X平台和iOS平台的应用程序。
2. OC中并没有"包"的概念,也就是没有命名空间机制,使用前缀可以有效的防止类名冲突。比如NSString(OC中的字符串类)、NSArray(OC的数组类),它们的前缀都是NS。
3. 为了防止跟C语言、C++关键字冲突,OC的关键字都以@开头。甚至字符串都是以@开头的,比如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串。
4. Objective-C和Java,C的相似点
(1)OC的nil 相当于java的null
(2)OC的self相当于java的this
(3)%i:相当于%d,表示输出整型。
5.#import是一个预处理指令,作用跟C语言的#include类似,都是 包含(拷贝)某个文件的内容 到 预处理指令所在的位置。第1行的#import <Foundation/Foundation.h>表示包含Foundation框架中的Foundation.h文件。Foundation框架中包含了很多常用的类和函数,比如字符串处理类NSString、日志输出函数NSLog。它的重要程度相当于Java中的java.lang.*
6、类
在OC中,一般用2个文件来描述一个类:
(1) .h:类的声明文件,只是声明一下成员变量和方法,不作具体的实现。使用关键字@interface和@end。
(2) .m:类的实现文件,用于实现.h中声明的方法。使用关键字@implementation和@end。
7、方法,方法的声明和实现,都必须以 + 或者 - 开头
+:表示类方法(静态方法)。
-:表示对象方法(动态方法)。
8、成员变量
(1)@public :全局都可以访问的变量。
(2)@protected:只能在类内部和子类中访问的变量。如果成员变量什么作用域都不写,OC默认作用域是@protected
(3)@private:只能在类内部访问的变量。c++默认的是private。
9、创建对象
创建原理:我们在创建一个对象时,首先要给对象分配一块存储空间,然后调用构造方法进行初始化。
实现举例:
Book *book =[Book alloc] //给Book这个类分配一块内存,OC的方法调用是用中括号[],括号里面先写方法的调用者Book,然后再写要调用的方法名alloc;
book = [book init]; //调用Book对象的构造方法init进行初始化
上面两步也可以连起来写成:Book *book =[[Book alloc] init];
10、销毁对象
使用原因:因为OC跟java不一样,java有自动垃圾回收机制,所以java开发根本不用考虑对象的生命周期,用完了系统会自动回收,但是OC不一样,OC需要开发者自己回收内存,因此,当不再使用某个对象时,需要调用对象的release方法释放掉此对象。代码如下:
[book release];//释放对象的内存
11、点语法
(1)概念:在Java中,我们可以通过"对象名.成员变量名"来访问对象的公共成员变量,这个就称为"点语法"。在OC中,访问对象的成员变量方式为:Book->prict;
(2)点语法举例如下:
Book.h声明类文件
#include<Foundation/Foundation.h>
//放要声明的变量
@interface Book : NSObject
{
int price;//不写修饰符默认作用域是@protected
}
-(void) setPrice : (int) newPrice;//声明setPrice:方法
-(int) price; //声明price方法
@end
Book.m实现类文件
#include<Foundation/Foundation.h>
@implementation Book
-(void) setPrice : (int) newPrice
{
price =newPrice;
}
-(int) price
{
return price;
}
@end
main.m文件
#include<Foundation/Foundation.h>
#include”Book.h”//要使用Book类的方法就要导入该文件
int main(int argc,const char* argv[])
{
@autoreleasepool
{
Book *book = [[Book alloc] init]; //创建一个book对象
book.price = 10; //调用set方法,代码相当于[book setPrice:10]
int price = book.price; //调用get方法,代码相当于[book getPrice]
NSLog(@”price = %i”,price);
[book release]; //程序结束,释放book对象占用的内存
}
return 0;
}
12、构造方法
(1)概念:默认的构造方法,也就是init方法,它是不接收任何参数的。在实际开发中,为了方便,会经常自定义构造方法。
(2)实现步骤:
(3)1.在Book.h文件中添加方法声明
#include<Foundation/Foundation.h>
@interface
{
int _price;
}
- (id)initWithBook:(int)price;//id可以代表任何OC对象,这个构造方法接收一个int类型的参数,顺便设置成员变量_book的值。
@end
2.在Student.m文件中实现构造方法
说明:如果在.m文件中的方法没有在.h中声明,那么该方法是私有方法。
#include<Foundation/Foundation.h>
@implementation
-(id)initWithPrice(int)price
{
self =[super init];//调用父类的构造方法返回一个初始化好的Book对象
if(self!=nil) //如果初始化成功则进行赋值
{
_price= price; //给成员变量赋值
}
return self; //返回初始化并赋值过后的self
}
@end
3.在main.m文件中调用构造方法
#include<Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
Book *book =[Book initWithPrice:10];//初始化一个book对象
NSLog(@”%@”,book); //输出book对象
[book release];//释放book 对象
return 0;
}
输出结果为:2014-06-19 14:46:49.896 构造方法[492:303] <Book: 0x100109910>
由以上输出结果可以看出,输出的对象只是对象的内存地址。我们可以通过重写description的方法修改它的输出格式。
description方法:该方法是父类打印一个对象的方法,可以通过重写该方法修改对象输出方式。
在Book.m文件中重写description方法。代码如下:
-(NSString *) description
{
//调用了NSString这个类的静态方法stringWithFormat初始化一个字符串对
//象,并返回这个字符串
return [NSString stringWithFormat:@”price=%i”,_price];
}
再次运行main.m文件,输出结果为:
输出结果为:2014-06-19 14:46:49.896 构造方法[492:303] price=10
13、objective_C中用@interface和 @property 方式声明变量的区别
1.在 @interface :NSObject{} 的括号中声明变量,当然NSObject 是指一个父类,也可以是其他的。
2.另外一种是直接在 @interface : NSObject{}括号之后,用 @property 去定义一个变量。
提示:你可以单独在@interface中定义变量,而不用@property定义;也可以只用@property去定义,而不在@interface中定义,当然用了@property去定义,一般要在.m文件中用@synthsize去合成相应的setter,getter方法。否则会得到一个警告。
那这两种方式有什么区别呢。
1. 只在@interface中定义变量的话,你所定义的变量只能在当前的类中访问,在其他类中是访问不了的;而用@property声明的变量可以在外部访问。
2.用了@property去声明的变量,可以使用“self.变量名”的方式去读写变量。而用@interface的方式就不可以。
14、OC注释
#pragma mark 标签:给方法标明一注释,可以快速定位。
#pragma mark -标签:带下划算加上标签即给注释分组,给注释分类,以便查看。