Object-c 基础(一)

总结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。 




 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值