OC_01

//OC语言的特点:书P4


#import <Foundation/Foundation.h>
#import "Student.h"


在Student.h文件里

#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  受保护的,只有类本身和类的子类可以访问
     @private    私有的,只有类本身才能访问
     */
    
}

//方法的声明
/*
 减号(-)表面该方法是实例方法.类方法则用加号(+).(书P23)  括号中void表示无返回值类型,其他类型还有 NSInteger,NNString类型等等
 */
-(void)sayHello;    //实例方法

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

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

@end


在Student.m文件里

@implementation Student

-(void)sayHello
{
    NSLog(@"Hello everybody!!!");

}

-(NSString *)eatLunch
{
    if (_age < 18)
    {
        return [NSString stringWithFormat:@"%@小姐,今晚有空吃饭么?",_name];
    }
    else
    {
        return [NSString stringWithFormat:@"%@小姐,今晚我没空吃饭!",_name];
    }
}

+(NSString *)playGame
{
    return [NSString stringWithFormat:@"I like playing LOL"];
}

@end




在main函数里

//相当于一个声明文件

@interface Teacher : NSObject
{
     @public
    NSString *_name;
 
}
-(void)classBegin;

@end
//相当于实现文件
@implementation Teacher

-(void)classBegin
{
    NSLog(@"%@ say class begin!",_name);
 
}

@end



/*
 在OC中,我们是使用#import指令来导入头文件的.
 
 #import "header"   导入自定义类的头文件
 #import <header>   导入IOS框架类库里类的文件的.
 
 Foundatiao框架是用来处理用户界面之下的层(layer)中的特性的,例如数据结构和通讯机制,我们OC中的程序,都是以Foundation框架为基础的.
 
 //作业
 #inculde 与 #import的区别?
 
 */



int main(int argc, const char * argv[]) {
    
    /*
       自动释放池(@autoreleasepool)
     自动释放池技术提供了一种机制,可以让我们将对象的所有权释放,但是不会导致对象马上被清理,例如用在一个方法返回一个对象中.
     有以下三种情况我们可能会用的自动释放池技术
     1.如果我们写的程序不是基于UI框架的,如命令行工具
     2.如果我们写的程序中有循环并且产生大量的临时对象
     3.如果你并发第二个线程
     
     通常我们不需要建立自己的自动释放池块.在OC中,以后需要在main函数中创建对象都在我们的autoreleasepool中创建,让它来自动帮我们管理对象所有权的释放
     */
    @autoreleasepool {
        
        //NSLog()是系统提供的日志函数,用来在控制台打印出调试信息
        NSLog(@"Hello, World!");    //NSLog 与 printf函数的区别?
        //printf("Hello,World!");
        
        /*
              面向对象的特征和概念
         面向对象是现在主流的程序设计思想.面向对象是把构成问题的事物分解成各个对象,然后协调各个对象之间的联系和通讯.建立对象之间的目的不是为了完成某一个步骤,而是为了描述某个事物在整体解决问题的步骤中的行为.
         
         其基本思想是:使用类,对象,属性,方法(函数)以及封装,继承和多态等概念来进行程序设计.
         
         */
        //OC中常用的数据类型,前缀 :NS
        NSInteger age = 25;   //整型
        NSUInteger age1 = 25;  //无符号整型
        
        CGFloat source = 34.5;
        NSRange range;
        CGPoint point;
        CGSize size;
        NSRect rect;
        
        NSString *string = @"My name is yong";
        char c = [string characterAtIndex:3];
        NSLog(@"c = %c",c);
        
        //OC里面没有多维数组,只有数组嵌套数组
        NSArray *array = @[@1,@2,@3,@4];
        
        NSDictionary *dictionry = @{@"name":@"yong",@"age":@22};
        
        NSDate *date  = [NSDate date];  //美国日期
        
        NSData *data = [NSData data];   //二进制数据
        
        //NSURL   网址
        //NSOperationQueue   线程
        //NSThread     线程
        //dispatch_get_main_queue()   线程
        
        /*
         什么是类?
         类是一组具有相同属性及行为的对象的组合
         在OC中,类是由接口(interface)和实现(implement)两部分组成
         .h 接口文件,用来实现属性的声明和方法的声明
         .m 实现文件,用来实现属性和方法
         
         什么是对象?
         对象就是类的具体实现
         
         */
        
        /*
         创建和使用对象
         OC创建对象的语法:
             类名 *对象名 = [[类名 alloc]init];
         或者
             类名 *对象名 = [类名 new];
         
         alloc 为对象动态分配内存地址,需要做内存管理,放在堆上面.需要做内存管理
         init  在内存中填上初始值
         
         堆:
         栈:
         
         new   为alloc 和 init简写
         */
        
        Student *stu = [[Student alloc] init];
        /*等价
        Student *stu1 = [Student alloc];
        stu1 = [stu1 init];
         */
        Student *stu2 = [Student new];
        
        //如何给类中的属性赋值以及调用类中的方法
        //属性赋值,通过 -> 给实例变量赋值
        stu->_name = @"小红";
        stu->_age = 15;
        stu->_address = @"广东";
        stu->_hobby = @"看书";
        
        NSLog(@"stu-> = %@",stu->_name);
        
        [stu sayHello];
        
        NSString *stuString = [stu eatLunch];
        NSLog(@"stuString = %@",stuString);
        
        //手动创建一个类
        Teacher *stu3 = [Teacher new];
        stu3->_name = @"小黑";
        [stu3 classBegin];
    }
    return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值