iOS开发学习笔记(二)
只有上层的技术框架提供不了我们所需的效果才去考虑下层框架的技术
项目框架的构建
遵守MVC的设计原则,尽量把数据、界面、控制这三层分清楚
可移植性考虑
鉴于移动平台的多样性,核心业务功能和模块尽量使用c或者c++进行开发
类和C++的概念是一样的,是对象的抽象,在Objective-C中明确分为接口和实现这两部分
** 类的声明:
@interface 类名:父类<协议1,协议2,…>
{
内部变量
}
@property (修饰1,修饰2,…) 类名* 属性名;
…
+(返回类型)静态方法:参数;
-(返回类型)动态方法:参数;
…
@end
** 类的实现:
@implementation 类名
@synthesize 属性1,属性2…
类方法的具体实现 ...
@end
类的属性修饰符说明
strong 强拥有属性(新编译器常用)
weak 弱拥有属性(OS?X?v10.6和iOS?4不支持)
copy 深拷贝
assign 基础数值类型赋值、浅拷贝
retain 对象引用,对赋值对象引用计数+1
nonatomic非原子,即多线程访问时不加锁
readwrite 可读写属性(默认的修饰, 有getter和setter)
readonly 只读属性(没有setter函数)
注意:
NSString类型的类属性一般用copy修饰进行深拷贝
* 类别(Category)
类别是对现有类的功能扩展和分类,类别也分为声明和实现两部分
类别的声明:
@interface 现有类 (类别名称)
+(返回类型)静态方法:参数;
-(返回类型)动态方法:参数;
@end
类别的实现:
@implementation 现有类(类别名称)
方法的具体实现
@end
同一个类的类别的名字必须是唯一的
类别的方法若和现有类的方法相同则会覆盖原方法(请慎用这个特性)
类别只能为现有类增加新的方法而无法增加新的数据成员
selector的类型是SEL
定义一个选择器并赋值:
SEL mySelector = @selector(方法名)
调用选择器指定的方法:
[类对象 performSelector:mySelector];
判断某对象或类是否响应指定的选择器:
[类对象 respondsToSelector:mySelector];
[类名称 instanceRespondToSelector:mySelector];
CF- Core Foundation
CG- Core Graphics
CA- Core Animation
UI- User Interface
IB- Interface Builder
-- 继续入门篇
- > 开发框架
iOS开发框架由上而下可以这样概括包括:Cooca Touch,Media,Core Services,Core OS。如下图所示:
越下层内容,越偏向于系统底层服务,不同层次的内容举例如下:
Core OSCFNetwork、SecurityCore ServicesCore Foundation、 Address Book、 System ConfigurationMediaCore Graphics、Media Player、OpenGL ES、Quartz CoreCocoa TouchUIKit、AddressBook UI
更详细内容,参见官网SDK Reference说明。
注意:我们在开发过程中,尽量选用上层提供的类型进行封装实现所要的逻辑,完成不了才考虑更底层的框架,这也是iOS开发的普遍规则。
- > 开发原则
只有上层的技术框架提供不了我们所需的效果才去考虑下层框架的技术
项目框架的构建
遵守MVC的设计原则,尽量把数据、界面、控制这三层分清楚
可移植性考虑
鉴于移动平台的多样性,核心业务功能和模块尽量使用c或者c++进行开发
- > Objective-C语言
Objective-C必须紧记的特点
所有类都以NSObject为基类对象都以指针的形式来表示#import代替#includeself代替thisid代替void*nil代替NULLBOOL类型用YES/NO代替TRUE/FALSE不能多继承,只能单继承(只有一个父类)不支持命名空间不支持运算符重载支持多态、动态识别和反射机制
- > Objective-C的类、类别、协议和委托
类和C++的概念是一样的,是对象的抽象,在Objective-C中明确分为接口和实现这两部分
** 类的声明:
@interface 类名:父类<协议1,协议2,…>
{
内部变量
}
@property (修饰1,修饰2,…) 类名* 属性名;
…
+(返回类型)静态方法:参数;
-(返回类型)动态方法:参数;
…
@end
** 类的实现:
@implementation 类名
@synthesize 属性1,属性2…
类方法的具体实现 ...
@end
* 类的属性(Property)
在类的interface内部定义:
@property (修饰1,修饰2,…) 类名* 属性1;
@property (修饰1,修饰2,…) 类名* 属性2;
在类的implementation同步:
@synthesize 属性1,属性2…
类的属性实际上是暴露给外部使用的成员变量, 定义了一个属性实际上就定义了一个成员变量的存取方法(有getter和setter两个函数)
例如 @property (assign, nonatomic) NSInteger val;
在@synthesize之后就等于实现了如下两个方法:
- (void)setVal:(NSInteger)input;
- (NSInteger)getVal;
在类的interface内部定义:
@property (修饰1,修饰2,…) 类名* 属性1;
@property (修饰1,修饰2,…) 类名* 属性2;
在类的implementation同步:
@synthesize 属性1,属性2…
类的属性实际上是暴露给外部使用的成员变量, 定义了一个属性实际上就定义了一个成员变量的存取方法(有getter和setter两个函数)
例如 @property (assign, nonatomic) NSInteger val;
在@synthesize之后就等于实现了如下两个方法:
- (void)setVal:(NSInteger)input;
- (NSInteger)getVal;
类的属性修饰符说明
strong 强拥有属性(新编译器常用)
weak 弱拥有属性(OS?X?v10.6和iOS?4不支持)
copy 深拷贝
assign 基础数值类型赋值、浅拷贝
retain 对象引用,对赋值对象引用计数+1
nonatomic非原子,即多线程访问时不加锁
readwrite 可读写属性(默认的修饰, 有getter和setter)
readonly 只读属性(没有setter函数)
注意:
NSString类型的类属性一般用copy修饰进行深拷贝
* 类别(Category)
类别是对现有类的功能扩展和分类,类别也分为声明和实现两部分
类别的声明:
@interface 现有类 (类别名称)
+(返回类型)静态方法:参数;
-(返回类型)动态方法:参数;
@end
类别的实现:
@implementation 现有类(类别名称)
方法的具体实现
@end
同一个类的类别的名字必须是唯一的
类别的方法若和现有类的方法相同则会覆盖原方法(请慎用这个特性)
类别只能为现有类增加新的方法而无法增加新的数据成员
*协议(protocol)
类似C++的纯虚类,和Java的接口概念相似。协议的定义只有声明而无需实现。
声明:
@protocol <父协议1,父协议2,…>
@optional --该修饰符下面的方法可以实现也可以不实现
方法声明
@required --默认修饰符,要求下面的方法必须实现
方法声明
@end
类似C++的纯虚类,和Java的接口概念相似。协议的定义只有声明而无需实现。
声明:
@protocol <父协议1,父协议2,…>
@optional --该修饰符下面的方法可以实现也可以不实现
方法声明
@required --默认修饰符,要求下面的方法必须实现
方法声明
@end
*委托(delegate)
委托即代理的意思,是指把方法的实现转交给其他遵守协议的类
使用委托的步骤:
1.定义协议(如@protocol MyProto…)
2.定义委托对象,常见的定义方法有
id<协议> 委托对象;
NSObject<协议>* 委托对象;
3.调用委托对象遵守的协议中的方法
委托即代理的意思,是指把方法的实现转交给其他遵守协议的类
使用委托的步骤:
1.定义协议(如@protocol MyProto…)
2.定义委托对象,常见的定义方法有
id<协议> 委托对象;
NSObject<协议>* 委托对象;
3.调用委托对象遵守的协议中的方法
- > Objective-C的动态识别和调用
selector的类型是SEL
定义一个选择器并赋值:
SEL mySelector = @selector(方法名)
调用选择器指定的方法:
[类对象 performSelector:mySelector];
判断某对象或类是否响应指定的选择器:
[类对象 respondsToSelector:mySelector];
[类名称 instanceRespondToSelector:mySelector];
* Objective-C的动态识别和调用方法总结
-(Class)NSClassFromString(NSString*)
让指定的字符串变成已定义的类名
-(BOOL)isKindOf:class-object
对象是否为class-object或其父类
-(BOOL)isMemberOf:class-object
判断对象是否为class-object
-(BOOL)respondsToSelector:selector
判断对象是否能响应selector指定的方法
+(BOOL)instanceRespondToSelector:selector
判断指定的类实例是否能响应selector
+(BOOL)isSubclassOfClass:class-object
判断对象是否是指定类的子类
-(id)performSelector:selector
调用用selector指定的方法
+(BOOL)comformsToProtocol:protocol
判断一个类是否遵守指定的协议
-(Class)NSClassFromString(NSString*)
让指定的字符串变成已定义的类名
-(BOOL)isKindOf:class-object
对象是否为class-object或其父类
-(BOOL)isMemberOf:class-object
判断对象是否为class-object
-(BOOL)respondsToSelector:selector
判断对象是否能响应selector指定的方法
+(BOOL)instanceRespondToSelector:selector
判断指定的类实例是否能响应selector
+(BOOL)isSubclassOfClass:class-object
判断对象是否是指定类的子类
-(id)performSelector:selector
调用用selector指定的方法
+(BOOL)comformsToProtocol:protocol
判断一个类是否遵守指定的协议
- > 开发中常见的前缀
CF- Core Foundation
CG- Core Graphics
CA- Core Animation
UI- User Interface
IB- Interface Builder
- > 网络资料
在学习iOS开发过程中,寻找问题过程中,或多或少收藏了一些博文。在此同样分享一下:
(完)
没有评论:
发表评论