OC_03对象方法属性等基本概念

1.首先,建立好一下工程,其中SubStudent继承于Student
建立Student类继承于NSObject和SubStudent类继承于Student类
2. OC语言的特点(p4):
OC是C语言的超集
OC具备完善的面向对象的特性
OC有个运行时系统(runtime)
OC有非常丰富的类库
3.返回到main.m 我们先看看头文件,先将Student.h导入
OC导入头文件用的是#import,而C用的是#include,那么这两个又有什么区别呢?
区别:在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。
除此之外,
#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。
#import比起#include的好处就是不会引起交叉编译

#import<>跟#import”“的区别是:
#import” ” 导入自定义的头文件
#import< > 导入ios框架类库里类的头文件
4.往下,我们看到一个函数@autoreleasepool,翻译为自动释放池,那什么是自动释放池呢?
自动释放池技术提供一种机制,可以让我们将对象的所有权释放,但是不会导致对象马上被释放
通常我们不需要建立自己的自动释放池。在OC中,以后需要在main函数中创建对象都在我们的autoreleasepool中创建
,让它自动来帮我们管理对象的所有权释放。
5.面向对象的特征和概念
面向对象是把构成问题的事物分解成各个对象,然后协调各个对象之间的联系和通讯。
其基本思想:使用类、对象、属性、方法以及 封装、继承和多态等概念来进行程序设计。
什么是类?
类是一组具有相同属性(特征)和行为的对象的集合。
在OC中,类是由接口(interface)和实现(implementation)两部分构成。
什么是对象?
类的具体的实现。
.h是接口文件,用来实现属性的声明 和 方法 的声明。
.m是实现文件,用来属性和方法。
创建和使用对象

//OC创建对象的语法:
//类名 *对象名 = [[类名 alloc]init]; 或者 类名 *对象名 = [类名 new];
Student *stu =[[Student alloc]init]; 
Student *stu = [student new];

alloc 为对象动态分配内存地址 init 在内存中填上初始值
new 为alloc 和init 简写
如果给类中的属性赋值以及调用类中方法
对象名->实例变量名 = 具体值; //引用对象的实例变量
[对象名 方法名]; //引用对象的方法
6.我们来看看.h文件(即接口文件)
@interface @end 关键字, 表示声明的开始和结束。
在OC中继承的语法 “类名:父类名”
我们看看属性和方法,并举个小例子

@interface Student : NSObject
{
    @public
    //用来定义类的属性
    NSString *_name;
    NSInteger *_age;//int age;
    @private
    NSString *_hobby;
    @protected
    NSString *_address;
   /*
     属性的作用域
     @public 公开的,任何类的方法都可以访问
     @protected 受保护的,只有类本身和类的子类可以访问
     @private 私有的,只有类本身可以访问
 */

}
//方法声明
/*
 减号(-)表示该方法为实例方法;
 加号(+)表示该方法为类方法;

 void表示无返回值类型,其他的类型还有 NSString,NSInteger,CGFloat...
 */
-(void)sayHello;
-(NSString *)eatSupper;
+(NSString *)playGame;

7.再看看Student.m文件,即实现文件
//@implementation @end 关键字, 表示声明的开始和结束,在其中实现接口文件中声明的方法

@implementation Student
-(void)sayHello{
            NSLog(@"Hello,My name is Mr.Zhang!");
}
-(NSString *)eatSupper{
        if (_age < 18) {
                  return [NSString stringWithFormat:@"%@姑娘,今晚有空吃饭么",_name];
    }
        else{
                        return [NSString stringWithFormat:@"%@姑娘,不吃饭咱就去看电影吧",_name];
        }
}
+(NSString *)playGame{
                      return @"小撸怡情,大撸伤身,强撸灰飞烟灭,别玩LOL!";
}
@end

8.基本的概念基本就介绍完了,我们来举个栗子吧~

 #import "SubStudent.h"
@implementation SubStudent
-(void)sayWord{
    //@public 修饰的 ,所有类都能访问
    NSLog(@"%@",_name);
    NSLog(@"%ld",(long)_age);
    //@protected修饰的,该类和其子类都可以访问
    NSLog(@"%@",_address);
    //NSLog(@"%@",_hobby);
}
@end

 #import "Student.h"
@interface SubStudent : Student
-(void)sayWord;
@end

来看看主函数main.m
//手动创建一个类
@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[]) {
            @autoreleasepool {
            Student *stu = [Student new];
        //Student *stu1 = [[Student alloc]init];
        stu->_name = @"Rose";
        [stu sayHello];
        NSLog(@"Student ->name = %@",stu->_name);
        stu->_age = 22;
        NSString *result = [stu eatSupper];
        NSLog(@"%@",result);
         // stu->_hobby = @"\"诶...敲代码,CF,LOL,DNF,QQ三国\"";
         [Student playGame];
        //手动创建一个类
        Teacher *teacher = [Teacher new];
        teacher->_name =@ "Rose";
        [teacher classBegin];
         }
        return 0;
}

最后运行的结果为:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值