总结Object
这是之前学的知识点现在才认真的做个总结,描述的不是很详细,对于与IOS开发个人感觉看文档非常好一种学习方法。这篇文章仅仅共以后自己参考,有需要的也可以……
(c c++ java php python object) 等等
一、基本语法(对于已经学过编程语言的人来说,不管那一种,前面的基础知识都是类似的,只是语法格式不同而已)
1、数据类型
2、语句
3、程序控制结构
4、函数
二、面向对象编程 (与java 和 C++)在这里没有描述
1、类的相关概念
2、封装,继承和多态
3、object-c 特有 分类和协议
1)、分类:在已有类的基础上对类进行扩展
使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以做到。我们可以为一个类创建一个新的方法,而不需要在代码中编辑类定义
分类的声明
@interface 类名(分类名)
新增方法的声明;
@end
分类定义
@implementation 类名(分类名)
新增方法的定义;
@end
注意点
分类中不能声明变量;
不能对分类进行实例化
类名和分类名的顺序不能颠倒
方法名冲突(分类的方法和原始类中的方法名冲突,然后导致原来的类方法不能用)
实例代码
2)、协议相当于java中的接口,相当于C++中的抽象类。相当于方法列表,不依赖类
定类
协议的定义
@protocol 协议名
@end
协议在类中的声明
@interface 类名:父类名<协议名>
@end
协议方法的实现
@implementation 类名
类和协议中的声明方法的实现
@end
关键字
@required :类用这个包含这个关键子的协议 就要一定实现其中的方法
@optional :遵守协议的类可以选择性的实现协议中的声明的方法。
多个协议的使用
@interface 类名:父类名<协议1,协议2,…,协议n>
在协议中使用协议
@protocol 协议2<协议名1>
@end
判断协议实现的方法
if([类名 conformsToProtocol :@protocol(协议名)] == BOOL){}
同时分正式协议和非正式协议
非正式协议(interface),但其实质仍是调用正式协议(protocal)
正式协议(protocal)可以将业务中的方法定义剥离出来,形成一个单独的文件,这跟传统OO中的提取接口是不谋而合的。如果遇到二个系统需要交换数据,可以制定一套双方都遵守的protocal,然后这二个系统中都把这个协议文件添加到项目中,实现它即可。这一功能,非正式协议(@interface)就做不到。
实例代码:
//Person.h文件 设计部分
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int age;
NSString* name;
int identify;
}
@property int age;
@property NSString * name;//@property属性
-(int) identify;
-(void) setIdentify :(int) _identify;
-(void) initWithAge:(int) n andName:(NSString*) _name andIdentify:(int) _identify;//初始化
-(void) show;
@end
//Person.m文件 实现部分
#import "Person.h"
@implementation Person
@synthesize age;
@synthesize name;
//方法实现
-(int) identify{
return identify;
}
-(void) setIdentify :(int) _identify{
identify = _identify;
}
-(void) initWithAge:(int) n andName:(NSString*) _name andIdentify:(int) _identify{
age = n;
name = _name;
identify = _identify;
}
-(void) show{
NSLog(@"name = %@, age = %d, identify = %d" ,name,age,identify);
}
@end
//childern.p 子类 注意这里还实现了协议 ShareFun
#import "Person.h"
#import "ShareFun.h"
@interface Childern : Person<ShareFun>
{
int degree;
}
@property int degree;
-(void) play;
@end
//Childern.m 子类实现
#import "Childern.h"
@implementation Childern
@synthesize degree;
-(void) play{
NSLog(@"like play!!!");
}
-(void) learn{
NSLog(@"can learn!!");
}
-(void) speaking{
NSLog(@"can speak!!");
}
@end
//Childern+ChildTech.h 分类 基于Childern类上 并增加了一个新的方法 不能增加实例变量
#import "Childern.h"
@interface Childern (ChildTech)
-(void) playGame;
@end
<pre class="objc" name="code">//Childern+ChildTech.m 分类 的实现
#import "Childern+ChildTech.h"
@implementation Childern (ChildTech) -(void) playGame{ NSLog(@"game over!!"); } @end
<p>//ShareFun.h 协议的设计</p><p>#import <Foundation/Foundation.h></p><p>@protocol ShareFun <NSObject></p><p>@required
-(void) learn;</p><p>@optional
-(void) speaking;
@end
</p>
//main 主方法
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Childern.h"
#import "Childern+ChildTech.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
NSLog(@"你好!");
Person * per = [[Person alloc] init];
[per setName:@"john"];
[per setAge:23];
[per setIdentify:1231212];
NSLog(@"name = %@, age = %d, identify = %d" ,[per name],[per age],[per identify]);
Person * person = [[Person alloc] init];
[person initWithAge:34 andName:@"Joe" andIdentify:21313];
[person show];
Childern * child = [[Childern alloc] init];
[child initWithAge:12 andName:@"alice" andIdentify:1221];
[child play];
[child playGame];
[child learn];
[child speaking];
//动态类型的应用
id ddd;
Childern * childnew = [[Childern alloc] init];
ddd = childnew;
[ddd initWithAge:12 andName:@"jobs" andIdentify:3221];
[ddd show];
}
return 0;
}
由于对手机上的开发比较感兴趣 ,尽管现在已经不是像两三年前那么热了。但是还是本着兴趣了解下。 希望能够通过自己的学习,在后面的某个时间能够做出一个应用程序出来,做出手机上的一个App。