1. Hello, World
int main()
{ /* my first program in Objective-C */ NSLog( @" Hello, World! \n "); return 0; }
2. Block(本质是匿名函数,类似C的函数指针, JS closure, C++11的Lambda functions)
(1) example:
NSLog(@"sum is %d", sum);
}
3.语法糖
4. 新关键字
_Packed | protocol | interface | implementation |
NSObject | NSInteger | NSNumber | CGFloat |
property | nonatomic; | retain | strong |
weak | unsafe_unretained; | readwrite | readonly |
5. 类和对象
(3)-修饰实例方法(非静态方法), + 修饰类方法(静态方法)
#import@interface Box:NSObject{ double length; // Length of a boxdouble breadth; // Breadth of a boxdouble height; // Height of a box}@property(nonatomic, readwrite) double height; // Property-(double) volume;@end@implementation Box@synthesize height;-(id)init{ self = [super init];length = 1.0;breadth = 1.0;return self;}-(double) volume{ return length*breadth*height;}@endint main( ){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];Box *box1 = [[Box alloc]init]; // Create box1 object of type BoxBox *box2 = [[Box alloc]init]; // Create box2 object of type Boxdouble volume = 0.0; // Store the volume of a box here// box 1 specificationbox1.height = 5.0;// box 2 specificationbox2.height = 10.0;// volume of box 1volume = [box1 volume];NSLog(@"Volume of Box1 : %f", volume);// volume of box 2volume = [box2 volume];NSLog(@"Volume of Box2 : %f", volume);[pool drain];return 0;}
6.在OC中使用消息发送机制:[receiver message]
如果有多个参数,那么写作:[receiver param1:value1 param2:value2]
7. NSAutoreleasePool 与 autoreleasepool,语法:
}
NSAutoreleasePool被清空或是销毁时向池里所有的autorelease的对象发送一条release消息,从而实现对象的自动释放。
ARC中不能用NSAutoreleasePool,必须用autoreleasepool,目的是兼容MRC。
纯ARC编译的项目,无需要任何pool,编辑器会自动在合适的地方添加release.
pool release 和 pool drain (ios上二者完全相同, ios是reference-counted环境, GC在OS X 10.6后已经废弃)
在一个garbage collected环境里,release不做任何操作。 NSAutoreleasePool因此提供了一个 drain 方法,
它在reference-counted环境中的行为和调用release一样, 但是在一个garbage collected环境中则触发garbage collection动作。
当ARC开启时,开发者不用写retain, release和autorelease,编译器将自动在代码合适的地方插入。
不用手动管理对象的引用计数
考题:Block作为属性在ARC下应该使用的语义设置为?(D)
A. retain
B. weak
C. strong
D. copy
解释:
开发者使用 block 的时候苹果官方文档中说明推荐使用 copy,使用 copy 的原因就在于大家所熟知的把block从栈管理过渡到堆管理
在 ARC 下面苹果果帮助我们完成了 copy 的工作,在 ARC 下面即使使用的修饰符是 Strong,实际上效果和使用 copy 是一样的这一点在苹果的官方文档也有说明
9. Protocol (类似C++中的纯虚类)
定义与实现
@protocol ProtocolName@required// list of required methods@optional// list of optional methods@end
@interface MyClass : NSObject...@end
10. iOS异步操作(多线程)一般都有哪些方式
- gcd(首选)
- NSOperation和NSOperation(可以设置并发数和依赖关系)
- NSThread
- posix thread(即pthread)
11. GCD(Grand Central Dispatch)
GCD存在于libdispatch.dylib这个库中,有三种,分别为:
串行(SerialDispatchQueue),并行(ConcurrentDispatchQueue)和主调度队列(MainDispatchQueue)。
(1). 串行队列( 同步 和异步)
NSLog(@"tasksecond 已经加入队列\r\n");
(2).并行队列
NSLog(@"tasksecond 已经加入队列\r\n");
(3).主队列(主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择。)
});
12. 数据持久化
plist文件(属性列表)
preference(偏好设置)
NSKeyedArchiver(归档)
SQLite 3
CoreData
详见: