OC语言 OC初识-类与对象

来源:互联网 发布:shell 中执行 python 编辑:程序博客网 时间:2024/05/16 19:50

OC初识-类与对象



//

//  main.m

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


//OC语言的特点:p4


#import <Foundation/Foundation.h>

//按住com点它进入API(应用程序接口)


/*

 OC中,我们是使用#import指令来导入头文件的。


 #import "<#header#>"    //导入自定义类的头文件

 #import <<#header#>>    //导入ios框架类库里类的文件的。

 

 Foundation框架是用来处理用户界面之下的层(layer)中的特性的,例如数据结构和通信机制。我们OC中的程序,都是以Foundation框架为基础的。

 

 

 //作业

 #include  #import的区别?     P21

 


 */

#import "Person.h"

#import "Student.h"


//相当于一个声明文件,声明一个类Teacher,基于NSObjict

@interface Teacher : NSObject

{

    @public

    NSString *_name;


}


-(void)classBegin ;


@end


//相当于实现

@implementation Teacher


-(void)classBegin

{

    NSLog(@"%@ say class begin!",_name);

}


@end





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

    

    /*

     

     自动释放池

     自动释放池技术提供了一种机制,可以让我们将对象的所有权释放,但是不会导致对象马上被清理,例如用在一个方法返回一个对象中。

     有以下三种情况我们可能会用自动释放池技术:

     1.如果我们写的程序不是基于UI框架的,如命令行工具;

     2.如果我们写的程序中有循环并且产生大量的临时对象;

     3.如果你并发第二个线程。

     

     通常我们不需要建立自己的自动释放池块。在OC中,以后需要在main函数中创建对象都在autoreleasepool中创建,让它来自动帮我们管理对象所有权的释放。

     */

    

    @autoreleasepool {

        

        // insert code here...

        //NSLog()是系统提供的日志函数,用来在控制台打印出调式信息

        NSLog(@"Hello, World!");    //NALog printf函数的区别?

        

      /*

            面向对象的特征和概念

       面向对象是现在主流的程序设计思想。面向对象是把构成问题事物分解成各个对象,然后协调各个对象之间的联系和通讯。建立对象之间的目的不是为了完成某一个步骤,而是为了描述某个事物在整体解决问题的步骤中的行为。

       

       其基本思想是:使用类、对象、属性、方法(函数)以及封装、继承和多态等概念来进行程序设计。

       

       */

        

       //OC中常用的数据类型,前缀:NS

        

        NSInteger age = 25;       //整型

        

        NSUInteger age2 =25;     //无符号整型

        

        CGFloat source = 34.5;    //浮点型

        

        NSRange range ;     //结构体  表示范围作用

        CGPoint point ;     //结构体

        CGSize size ;   //结构体

        NSRect rect ;

        

        NSString *string = @"My name is Rick";

        char c = [string characterAtIndex:3];    //取下标为3'n'

        NSLog(@"c = %c",c);


        //OC里面没有多维数组,只有数组嵌套数组

        NSArray *array = @[@1,@2,@3,@4];

        

        NSDictionary *dictioanry = @{@"anme":@"Rick",@"age":@25};

        

        NSDate *date = [NSDatedate];   //美国日期

        

        NSData *data = [NSDatadata];   //二进制数据

        

        //NSURL     网址

        //NSOperationQueue    线程

        //NSThread     线程

        //dispatch_get_main_queue()   线程

        

        

        

        /*

         什么是类? 类是一组具有相同属性及行为的对象的组合

         OC中,类是由接口(interface)和实现(implement)两部分组成

         

         

         .h 接口文件,用来实现属性的声明 方法的声明

         .m 实现文件,用来实现属性和方法

         

         什么是对象?类的具体实现

         

         */

        

        /*

         创建和使用对象

         OC创建对象的语法:

            类名 *对象名 [[类名 alloc] init];

         或者

            类名 *对象名 [类名 new];

         

         alloc 为对象动态分配内存地址,需要做内存管理,放在堆上面。需要做内存管理

         

         init 在内存中填上初始值

         

         堆:?

         :?

         

         new    alloc init 的简写

         */

        

        

        Student *stu = [[Studentalloc] init];

    //等价于

        Student *stu1 = [Studentalloc];

        stu1 = [stu1 init];

 

    //或者

        Student *stu2 = [Studentnew];

        

        

    //如何给类中的属性赋值以及调用类中的方法

    //属性赋值,通过 ->给实例变量赋值

        stu->_name = @"小红";

        stu->_age = 15;

        stu->_address = @"广东";

        stu->_hobby = @"看书";

        

        NSLog(@"stu->name = %@",stu->_name);

        

        [stu sayHello];

        

        NSString *stuString = [stu eatLunch];

        NSLog(@"stuString = %@",stuString);

        

        

        //手动创建一个类

        

        Teacher *stu3 = [Teachernew];

        stu3 ->_name = @"小红";       //只能放在这一行

        [stu3 classBegin];

        

       

        

    }

    

    

    Person *stu4 = [Personnew];

    stu4->_name = @"小明";

    stu4->_age = 25;

    stu4->_hobby =@"sing";

    

    [stu4 sayHello];

    


    

    return 0;

}




//

//  Person.h

//  Kiwir-OC02

//

//  Created by ibokan on 15/12/8.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Person : NSObject


{   @public

    NSString *_name;          //字符串时要加*,下划线是命名规则

    NSInteger _age;

    NSString *_hobby;


}


/*

 OC中的方法

 方法:是类的功能代码,在(.h)文件中声明,在(.m)文件中实现。

 

 语法:

    -|+(返回类型)方法名:参数列表

 { .m中实现

    //方法体

 

 }

 

 减号(-)表示实例方法,加号(+)表示类方法

 

 

 

 */




-(void)sayHello;     //实例方法


-(void)sayHelloName:(NSString *)name   // 函数名:(数据类型)名称

             andAge:(NSInteger)age ;   //name与之前的_name是不同的,如果用_name_age的话要在main里先赋值,不然输出会显示null,要在main里赋值,又得对其的作用域改成@pubilic



//  或者加  _name = name,


//-(void)sayHelloName:(NSString *)_name

//             andAge:(NSInteger)_age ;



//类方法

/*

注意

 1.类方法可以调用类方法

 2.类方法不可以调用实例方法,但是类方法可以通过创建实例对象来访问实例方法

 3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量

 4.类方法作为消息,可以被发送到类里面去,不能发送到对象里面去。(p24)

   (只能通过类名来调用类方法,不可以通过对象调用类方法)

 

 */

+(void)sayHi;


+(void)hiGuys;





@end






//

//  Person.m

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import "Person.h"


@implementation Person


-(void)sayHello

{

    NSLog(@"%@",_name);

    NSLog(@"%d",(int)_age);

    NSLog(@"%@",_hobby);


}

@end




//

//  Student.h

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import <Foundation/Foundation.h>


//@interface @end关键字,表明声明的开始和结束


//Student 类的名称,NSObject是该类所属的父类,在OC中继承的语法为类型:父类名


@interface Student : NSObject

{

    @public

    NSString *_name;

//    @protected

    NSInteger _age;

//    @private

    NSString *_hobby;

    NSString *_address;


    /*

     属性的作用域

     @public        公开的,任何类的方法都可以访问

     @protected     受保护的,只有类本身和类的子类可以访问

                没写就默认是protected

     

     @private       私有的,只有类本身才能访问

     */

    

}


//方法的声明

/*

 减号()表明该方法是实例方法。类方法则用加号(+)。(p23-p24

 括号中void表示无返回值类型,其他类型还有 NSInteger,NSString类型等等。

 

 */

-(void)sayHello ;    //实例方法


-(NSString *)eatLunch;   //实例方法


+(NSString *)playGame;   //类方法


@end




//

//  Student.m

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import "Student.h"


//@implementation @end中实现接口文件声明的方法

@implementation Student


-(void)sayHello           //无返回值,直接输出

{

    NSLog(@"Hello everybody!!!");

}



-(NSString *)eatLunch

{

    if (_age <18) {        //有返回值就用 return返回

        return [NSStringstringWithFormat:@"%@小姐,今晚有空吃饭么",_name];

    }

    else

    {

        return [NSStringstringWithFormat:@"%@小姐,今晚我没空吃饭",_name];

    

    }


}


+(NSString *)playGame

{

    return [NSStringstringWithFormat:@"I like playing LOL!"];




}









@end




//

//  StudentSon.h

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import "Student.h"


@interface StudentSon : Student


-(void)sayWord;


@end




//

//  StudentSon.m

//  Kiwir-OC01

//

//  Created by ibokan on 15/12/7.

//  Copyright © 2015谭其伟. All rights reserved.

//


#import "StudentSon.h"


@implementation StudentSon


-(void)sayWord

{

    //_name@public修饰的,所有类都可以访问

    NSLog(@"%@",_name);

    

    //_age@protected修饰的,该类与其子类都可以访问

    NSLog(@"%d",(int)_age);

    

    //_hobby@private修饰的,只有该类本身可以访问

    //    NSLog(@"%@",_hobby);

    

}


@end






0 0
原创粉丝点击