ArcGIS Runtime SDK for iOS开发系列教程(3)——Objective-C语法基础
分享
Objective-C这门语言是由Brad Cox和Tom Love于1980年在Stepstone发明的。它是给C语言添加了面向对象的特性,与C语言完全兼容。目前,主要用于苹果的Mac OS X和iOS平台的开发。在2012年10月世界开发语言排行榜中Objective-C稳居于第三位。
•关键字
为了避免与C,C++语言中的关键字冲突,所有的Objective-C关键字都是以@开始。
如@class,@interface,@implementation,@property,@synthesize,@public,@private,@protected,@try,@catch,@throw,@finally,@end,@protocal,@selector等。比如要声明一个类,我们需要用到@interface,@end;要实现一个类,需要用到@implementation,@end。
•类
Objective-C中的类包含类的声明(.h)和类的实现(.m)两个文件。如下图中的gisxyViewController
使用@interface,@implementation,@end等关键字来声明和实现类,@interface gisxyViewController:UIViewController表明该类继承自视图控制器类UIViewController;
使用#import代替#include,避免同一个头文件被包含多次;
@property与@synthesize关键字是配对使用的,@property用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。类似于其他语言的setter/getter方法。其中@property(retain,nonamtic参数)代表了不同的赋值方式、读写方式等,跟内存管理相关,具体的大家可以参考google、百度。
@IBOutlet关键字用来声明输出口(插座),输出口就是应用中跟界面交互相关的实例变量,如MapView,Button等,推荐在属性声明中使用IBOutlet关键来实现。如@property (retain,nonamic) IBOutlet AGSMapView *mapView;
注:以IB(Interface Builder)开头的关键字IBOutlet and IBAction 都是与界面编辑器相关的,与编译器无关。
•方法
方法声明:
可以使用关键字IBAction声明,如(IBAction)opacitySliderValueChanged:(id)sender;
方法实现:
[实例 方法];或[类名 方法名]; 如[self.mapview addMapLayer:tiledLayer WithName:@"Tiled Layer"];
Objective-C语言允许在一个方法调用中嵌套另一个方法,比如:[NSString stringWithFormat:[test format]];
•协议
协议是多个类共享一系列相关方法的一种规范。协议中列出的方法没有响应的实现,由使用该协议的类来实现。
协议声明: 使用@protocol和@end关键字声明协议,可以是单独的.h文件也可以包含在某个类的头文件中。使用@optional和@required关键字可以来指定协议中的方法 是否必须要实现,默认是@required。
a.引用协议
一个类需要使用某个协议时,只需要在类的声明中添加<协议名>就可以,一个类也可以引用多个协议。如下图该类引用了模拟键盘的查询协议、MapView的触摸协议、GPS定位协议。
b.实现协议的方法
添加了协议引用后,就可以在该类的实现文件中来实现该协议所包含的方法。
•内存管理
iOS中不支持垃圾自动回收,对于内存管理应该遵循黄金法则
简单理解就是:如果对一个对象使用了alloc,copy,retain,那么你必须使用相应的release或autorelease;
对于release比较好理解,autorelease其实就是系统会自动将我们的Objective-C类收集到一个自动释放池NSAutoreleasePool中,当池子销毁时,再将这些类统一销毁。在main函数中系统会默认的创建这样的自动释放池NSAutoreleasePool,当然,我们也可以在程序中来创建和销毁,将一个类使用autorelease后,系统会将该类收集于离它最近的pool里面(栈顶)。
•异常处理 异常处理使用@try,@catch,@finally关键字,语法与其他语言类似。
•其他
id类型, Objective-C中使用id类型可以代表任何类型的,相当于NSObject*;
布尔类型, Objective-C中使用YES和NO,而不是TRUE和FALSE;
总结:本讲主要向大家介绍Objective-C的简单语法,对于语法部分推荐大家去网上找些相关的视频来看,那样可能效果更好。下一讲我将向大家介绍如何让你的项目支持ArcGIS的功能,欢迎大家继续关注!
文章来源:http://www.cnblogs.com/esrichina/archive/2012/10/25/2671149.html
•关键字
为了避免与C,C++语言中的关键字冲突,所有的Objective-C关键字都是以@开始。
如@class,@interface,@implementation,@property,@synthesize,@public,@private,@protected,@try,@catch,@throw,@finally,@end,@protocal,@selector等。比如要声明一个类,我们需要用到@interface,@end;要实现一个类,需要用到@implementation,@end。
•类
Objective-C中的类包含类的声明(.h)和类的实现(.m)两个文件。如下图中的gisxyViewController
使用@interface,@implementation,@end等关键字来声明和实现类,@interface gisxyViewController:UIViewController表明该类继承自视图控制器类UIViewController;
使用#import代替#include,避免同一个头文件被包含多次;
@property与@synthesize关键字是配对使用的,@property用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。类似于其他语言的setter/getter方法。其中@property(retain,nonamtic参数)代表了不同的赋值方式、读写方式等,跟内存管理相关,具体的大家可以参考google、百度。
@IBOutlet关键字用来声明输出口(插座),输出口就是应用中跟界面交互相关的实例变量,如MapView,Button等,推荐在属性声明中使用IBOutlet关键来实现。如@property (retain,nonamic) IBOutlet AGSMapView *mapView;
注:以IB(Interface Builder)开头的关键字IBOutlet and IBAction 都是与界面编辑器相关的,与编译器无关。
•方法
方法声明:
-(void) sum:(int)a and: (int) b; //带参数方法
-(double) convertToNum;
可以使用关键字IBAction声明,如(IBAction)opacitySliderValueChanged:(id)sender;
方法实现:
-(void) sum:(int)a and: (int) b
{
c=a+b;
}
-(double) convertToNum
{
return 1.0;
}
方法调用:[实例 方法];或[类名 方法名]; 如[self.mapview addMapLayer:tiledLayer WithName:@"Tiled Layer"];
Objective-C语言允许在一个方法调用中嵌套另一个方法,比如:[NSString stringWithFormat:[test format]];
•协议
协议是多个类共享一系列相关方法的一种规范。协议中列出的方法没有响应的实现,由使用该协议的类来实现。
协议声明: 使用@protocol和@end关键字声明协议,可以是单独的.h文件也可以包含在某个类的头文件中。使用@optional和@required关键字可以来指定协议中的方法 是否必须要实现,默认是@required。
@protocol MyProtocol
- (void)requiredMethod;
@optional
- (void)anOptionalMethod;
- (void)anotherOptionalMethod;
@required
- (void)anotherRequiredMethod;
@end 协议的使用
a.引用协议
一个类需要使用某个协议时,只需要在类的声明中添加<协议名>就可以,一个类也可以引用多个协议。如下图该类引用了模拟键盘的查询协议、MapView的触摸协议、GPS定位协议。
b.实现协议的方法
添加了协议引用后,就可以在该类的实现文件中来实现该协议所包含的方法。
•内存管理
iOS中不支持垃圾自动回收,对于内存管理应该遵循黄金法则
简单理解就是:如果对一个对象使用了alloc,copy,retain,那么你必须使用相应的release或autorelease;
对于release比较好理解,autorelease其实就是系统会自动将我们的Objective-C类收集到一个自动释放池NSAutoreleasePool中,当池子销毁时,再将这些类统一销毁。在main函数中系统会默认的创建这样的自动释放池NSAutoreleasePool,当然,我们也可以在程序中来创建和销毁,将一个类使用autorelease后,系统会将该类收集于离它最近的pool里面(栈顶)。
•异常处理 异常处理使用@try,@catch,@finally关键字,语法与其他语言类似。
•其他
id类型, Objective-C中使用id类型可以代表任何类型的,相当于NSObject*;
布尔类型, Objective-C中使用YES和NO,而不是TRUE和FALSE;
总结:本讲主要向大家介绍Objective-C的简单语法,对于语法部分推荐大家去网上找些相关的视频来看,那样可能效果更好。下一讲我将向大家介绍如何让你的项目支持ArcGIS的功能,欢迎大家继续关注!
文章来源:http://www.cnblogs.com/esrichina/archive/2012/10/25/2671149.html
0 个评论
相关问题
- 如何优雅的使用ArcGIS知乎?
- 建设ArcGIS知乎平台的目和意义?
- gis开发群的管理不讲理,求围观。
- ArcGIS知乎社区改进意见征集
- 【抽奖结果已出】ArcGIS知乎社区活动 之 你不知道的地理空间革命【转发分享有奖】【附奖品寄送照片】
- 苹果系统下可以使用arcgis 吗?
- 请问ArcGIS适合在局域网内用javaweb做二次开发吗?
- arcgis版本兼容性
- ArcGIS 知乎社区活动 之 字幕组加鸡腿暨KBP字幕组招新【获奖名单公布与优秀作品展示】
- 请问大神们,怎么用ArcGIS做城镇间经济联系强度的图?
- 在Visual studio 2015 中使用 Arcgis API for JavaScript v3.16 如何实现代码智能提示?