《iOS开发60分钟入门》

2015-12-03  本文已影响176人  RoFF

原文链接

@autoreleasepool

作用:优化内存的使用和释放

1, 写基于命令行的的程序时,就是没有UI框架,如AppKit等Cocoa框架时。

2, 写循环,循环里面包含了大量临时创建的对象。(本文的例子)

3, 创建了新的线程。(非Cocoa程序创建线程时才需要)

4, 长时间在后台运行的任务。

__weak, __strong :用来修饰变量

__strong 是缺省的关键词。

__weak 声明了一个可以自动 nil 化的弱引用。

__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。

__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。

对象 消息

在Java、C++世界,我们调用一个对象的某方法,在Objective-C里,这称作给类型发送一个消息

在Java里,对象和方法关系非常严格,一个方法必须属于一个类/对象,否则编译是要报错的。而在Objective-C里,类型和消息的关系比较松散,消息处理到运行时(runtime)才会动态决定,给类型发送一个它无法处理的消息,也只会抛出一个异常,而不会挂掉。

[obj undefinedMethod];

在代码里调用没定义的方法(这是Java世界的习惯说法啊,专业的叫法是,给obj对象传递它无法处理的消息),Xcode会警告,但编译能成功,运行的时候会出错。

@interface

与Objective-C的interface概念最接近的是C和C++里的头文件,它与implementation是成双成对出现的,作用是声明类的成员变量和方法。它与Java的interface概念完全不同:

Objective-C里,interface有且只有一个实现,Java的interface可以有0-N个实现

Objective-C里,interface可以定义成员属性,Java里不可以

Objective-C里,和Java的Interface概念相似的是Protocol

私有方法和公开方法

写在.h头文件里的方法都是公开的,Objective-C里没有私有方法的概念,要实现私有方法的效果只能借助Category

类方法:类似静态函数,加号前缀

@interface MyClass

+(void) sayHello;

@end

使用:[MyClass sayHello];

实例方法:非静态函数,减号前缀

@interface MyClass : NSObject

-(void) sayHello;

@end

mycls = [MyClass new];

[mycls sayHello];

上一篇下一篇

猜你喜欢

热点阅读