objective-C是C的超集可编译C
.h 头文件(存放接口)
.m 源码objective-c,c
.mm 源码objective-c,c,c++
预处理语句:
宏定义: #define
文件包含:#include,#import
条件编译:#ifdef #else
SmallTalk消息传递风格
调用对象的方式是给他发消息,消息的处理是运行时决定的,调用一个对象中没定义的方法(或发一个对象不能处理的消息)是可以通过编译的
基本语法
字符串 @"abcd"
方法调用 startedBlock();
调用实例方法 [obj method];//不含参 [counter increase:1];//含参 [[[UINavigationBar alloc] init] autorelease];//嵌套
类
-
接口(.h文件中,只有一个实现,.h中的都是公开的)
@interface MyClass { int memberVar1; id memberVar2; } +(void) sayHello;//+类方法 -实例方法 .h中的方法都是公开的 objective-c中无私有方法 -(return_type) instance_method1; -(return_type) instance_method2: (int) p1; -(return_type) instance_method3: (int) p1 andPar: (int) p2; @end
-
实现(.m文件中)
@implementation MyClass { int memberVar3; } +(void) sayHello { NSLog(@"Hello, World"); } -(return_type) instance_method1 { .... } -(return_type) instance_method2: (int) p1 { .... } -(return_type) instance_method3: (int) p1 andPar: (int) p2 { .... } @end
-
方法的调用
//类方法调用 [MyClass sayHello]; //实例方法调用 mycls = [MyClass new]; [mycls sayHello];
-
selector(方法指针)
@implementation DemoViewController - (void)downButtonPressed:(id)sender {//响应“按钮被按下事件”的方法 UIButton *button = (UIButton*)sender; [button setSelected:YES]; } - (void)drawAnButton { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = _frame; btn.tag = 1; btn.backgroundColor = [UIColor clearColor]; [btn addTarget: self action: @selector(downButtonPressed:) forControlEvents: UIControlEventTouchUpInside];//当这个按钮被按下时,触发downButtonPressed:方法 } @end @implementation ETHotDealViewController - (void)viewDidLoad { //获取数据源 HotDealDataSource *ds = [[HotDealDataSource alloc]init]; [ds reload]; _items = ds.items; [self performSelector: @selector(refreshTable) withObject: self afterDelay: 0.5];//延迟0.5秒调用refreshTable方法 } -(void)refreshTable { [self.tableView reloadData]; } @end
-
继承
@interface MyClass : NSObject @end
-
protocol(类似其他语言的接口)
//定义协议 @protocol Printable -(void)print:(NSString)str; @end //继承协议,继承自NSObject @protocol Printable <NSObject> -(void)print:(NSString)str; @end @protocol Printable @optional //可选实现,可以不实现print方法 -(void)print:(NSString)str; @end //协议实现 //MyClass 继承自NSObject 实现了协议Printable和Drawable @interface class MyClass : NSObject <Printable, Drawable> @end
-
category(分类,给已经存在的类添加方法)
//NSObject+Json+XML.h @interface NSObject (Json) -(NSString)toJson; @end @interface NSObject (XML) -(NSString)toXML; @end //NSObject+Json+XML.m @implementation NSObject (Json) -(NSString)toJson { //... } @end @implementation NSObject (XML) -(NSString)toXML { //... } @end //调用 import "NSObject+Json+XML.h" @implatementation XYZController -(void)test { NSObject *obj = [[NSObject alloc]init]; NSString *json = [obj toJson]; NSString *xml = [obj toXML]; } @end
Cocoa(Mac OS App的开发框架)
Cocoa Touch(iOS开发用的框架)
常用的设计模式delegate
一个AppDelegate(UIApplicationDelegate)
一个UIWindow
UIResponder(响应用户操作)