Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53210
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 297
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-09 10:52
文章分类

全部博文(34)

文章存档

2015年(23)

2014年(11)

我的朋友

分类: iOS平台

2015-04-09 10:28:59

一.OC简介

OC在IOS开发中,主要负责UI界面。
C/C++在IOS开发中主要是做图形处理。
OC在C语言基础上增加了最小的面向对象的语法,把复杂的面向对象语法全部去掉了。

OC没有包名及命名空间,取而代之的是在类前面加上前缀,如NSString中的NS
字符串也以@开头 如@"hello"

self相当于java中的this
nil相当于java中的null


OC里面只支持单继承,及一个类只有一个父类

OC不支持垃圾回收,需要手动释放对象

NSLOG(),结束后自动换行,并且带有时间和项目名信息
。如下:

#import 


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        // insert code here...

        NSLog(@"Hello, World!”);

        NSLog(@"Hello, World!");

    }

    return 0;


}

结果:

2015-03-17 15:22:36.828 基础1[896:303] Hello, World!

2015-03-17 15:22:36.830 基础1[896:303] Hello, World!



新一版本的SDK增加了ARC功能,编译器在编译的时候,他会自动检测没用释放对象的地方,然后自动帮你增加释放对象的语句。

OC里面代码的扩展名是.M

ccc *c1 = [[[ccc allocinitWithAge:100 andNo:222autorelease]; 自动释放内存

一般系统自带的静态方法都会自动释放内存。


self:动态方法里面代表调用他的对象

静态方法里面表示调用它的类名 +(void)fun{ [self alloc] }

[student new]也可以分配内存然后初始化。

student *su = [[student allocinitWithAge:19 andNo:11];等效于

student *su = [student new];


#import  包含头文件的特点是,他可以自动检测头文件有没有被重复包含,如果之前包含过的话,则不再包含。
#import    代表  Foundation框架里面的Foundation.h文件


OC中的类分为两个文件

    .h 类的声明文件,用于变量,方法的声明
    
.m 类的实现文件,用于实现.h中的方法


静态方法:用类名调用的方法 前面写+

动态方法:用对象调用的方法 前面写-


id可以理解为代表任何对象

release 释放对象的方法,只能释放一次,否则会报错


二.简单例子

aaa.h:

#import


@interface aaa : NSObject{//成员变量都定义在了{}里面


    int age;

    int no;


}

-(int)age;

-(int)no;


-(void)setAge:(int)a setNo:(int)b;


@end



aaa.m:

#import "aaa.h"


@implementation aaa


//getAge命名不适合OC,OC命名get方法直接写为age

-(int)age{

    

    return age;


}


-(int)no{

    

    return no;

    

}


-(void)setAge:(int)a setNo:(int)b{


    age = a;

    no  = b;

    

    return ;

    

}


@end


main.m:

#import


#import "aaa.h"//需要用到aaa对象,就得引用aaa.h


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        //创建一个aaa对象

        //调用静态方法alloc来分配内存

        aaa *a1 = [aaa alloc];

        

        //调用动态方法init来进行初始化

        a1 = [a1 init];

        

        //为了方便可以写成下面这样

        aaa *a2 = [[aaa alloc] init];

        

        [a1 setAge:20 setNo:1];

        int x = [a1 age];

        int y = [a1 no];

        

        NSLog(@"age--%d,no--%d",x,y);

        

        //会报错,因为ARC已经自动添加了释放的语句。

        //[a2 release];

        //[a1 release];

        

    }

    return 0;

}


三.点语法

-(void)setAge:(int)a setNo:(int)b;  他的方法名字叫setAge:setNo: *注意":"和两个方法名字都要写上
成员变量一般命名时候前面加 “_

设置断点:点击代码左侧会生成断点


用 %@ 来打印对象


点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。
切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。下面是一个点语法的简单例子,代码如下:

bbb.h:

#import


@interface bbb : NSObject{

    

    int age;


    

}


-(int)age;


-(void)setAge:(int)a;


@end


bbb.m:

#import "bbb.h"


@implementation bbb


-(int)age{


    

    NSLog(@"get方法");

    return age;


}


-(void)setAge:(int)a{


    NSLog(@"set方法");

    age = a;


}


@end


main.m:

#import


#import "bbb.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        bbb *b1 = [[bbb alloc] init];

        

        //点语法

        b1.age = 10;//实际等效于 [b1 setAge:10]    是编译器自动转换的     如果没有setAge方法,则会报错。

        

        int i = b1.age;//实际等效于 int i = [b1 get];  如果是被赋值就调用set方法,其他的就调用get方法

        

    }

    return 0;

}


四.构造方法


ccc.h:


#import 


@interface ccc : NSObject{


    int _age;

    int _no;


}


-(void)setAge:(int)age setNo:(int)no;

-(int)age;

-(int)no;

//自己写一个构造方法

-(id)initWithAge:(int)age andNo:(int)no;




@end


ccc.m:

#import "ccc.h"


@implementation ccc


-(void)setAge:(int)age setNo:(int)no{


    _age = age;

    _no = no;

    

    return;

}

-(int)age{

    return _age;

}

-(int)no{

    return _no;

}


-(id)initWithAge:(int)age andNo:(int)no{

    

    //首先要调用super的构造方法

    //因为 [super init] 有可能返回nil

    if( (self = [super init]) != nil){

        _age = age;

        _no = no;

    }

    return  self;

    


}


//重写父类的description方法

//当使用%@打印一个对象的时候,会调用下面的方法

-(NSString *)description{

    

    NSString *s = [NSString stringWithFormat:@"age--%d,no--%d",_age,_no];

    return s;

}



@end


main.m:


#import 


#import "ccc.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        ccc *c1 = [[ccc allocinitWithAge:100 andNo:222];

        

        NSLog(@"age--%d,no--%d",c1.age,c1.no);

        NSLog(@"%@",c1);

    }

    return 0;


}


阅读(724) | 评论(0) | 转发(0) |
0

上一篇:OC基础篇-4

下一篇:黑马程序员_OC篇2

给主人留下些什么吧!~~