day1: Objective-C概述、面向对象编程、类和对象、实例变量操作

Objective-C概述

       Objective-C 简称OC  扩充自C语言的面向对象编程语言。

       是OS X 和 IOS 的主要编程语言。

发展时间进度:

       1980年初发明了OC语言-->1988年NEXT公司使用OC开发-->1996年OC成为苹果主要编程语言。

OC语言的特点:

      OC语言是C语言的超集,允许在OC中使用C语言源代码,OC中兼容C和C++语言。

      具备完善的面向对象特性。

      类库丰富。

面向对象编程:

      面向对象编程:OOP(Object Oriented Programming)。

      面向对象语言:C++  java  C#。

      概念:对象、类、封装、继承、多态等等。

面向对象与面向过程的区别:

      面向对象和面向过程是两种不同的编程思想,前者以对象为中心,后者以事件为中心。

      特点:面向过程分析解决问题步骤,实现函数,依次调用函数;面向对象:分析工程中参与的对象,各个对象的作用,多个对象协作完成任务;

      侧重点:面向过程:实现功能;  面向对象:对象的设计;

      语言举例:面向过程:C语言       面向对象:OC  C++  java等。

      面向对象具有良好的可扩展性、可重用性。类和对象是面向对象的核心。定义类,创建对象,使用对象。

OC中类的定义:

      面向对象编程中,使用对象完成程序。

      开发中先定义类,再创建对象,然后使用对象。

      定义类包含两部分:接口部分和实现部分,1、接口部分:对外声明类的特征和行为,.h文件;2、实现部分:对内实现行为,.m文件。

      接口部分包含:类名、父类名、实例变量、方法等。

      实现部分:实现类的行为。

      类是对象的抽象,对象是类的体现。


创建对象分两部分:分配内存空间和初始化,初始化即为类的对象设置初始值。


实例变量的三种可见度:

      @public      公有的   作用域是所有

      @protected   受保护的   默认的  作用域在本类和所有子类

      @private    私有的   作用域只在本类  属性生成的实例变量是私有的

OC中命名规则:

      类命名规则:首字母大写的驼峰法命名规则;

      方法命名规则:首字母小写的驼峰法命名规则;

      对象命名规则:跟方法命名规则相同 。    

id和instancetype的比较:

       1、相同点:这两个类型都表示泛型类型,表示的是对象类型;

       2、不同点:id在编译期不确定它的类型,instacetype在编译期就已经知道它的类型了;   

            id s=[[Person alloc]init]  只有到了运行期才把id判定为Person类型; 

       3、id既可以作为返回值类型使用,也可以作为参数类型使用;instancetype只能作为返回值类型使用,不能作为参数类型使用。

     

      init在java中叫构造器方法,在OC中叫初始化方法。


第一天课堂内容笔记 lessonOC01day:


Person.h:

#import <Foundation/Foundation.h>

//interface:接口  .h文件是类的声明文件,也叫接口文件
//类的声明以@interface开头,以@end结束
//Person是我们自己的定义的类的名字
//:表示继承关系
//NSObject 是父类,NSObject是OC中根类,是所有类的父类,也是最大的一个类。OC中其他类都直接或者间接的继承NSObject类。
@interface Person : NSObject{
   
    //父类后加一个大括号,大括号就是声明类的特征的地方,也叫做类的实例变量。其他语言叫成员变量。
    //OC中有一个类专门表示字符串,它就是:NSString类
    //OC中除了基本数据类型,其他所有都是指针类型。
    @public  //公共的,默认是protected,私有是provate
    NSString *_name; //声明名字,XCODE4.0之前声明name前需要加_(_name);
    int _age; //除了基本数据类型外,其他需要用指针类型
    
    
}
//***方法的声明在大括号后,end前***
-(void)sayHi;

//end 结束
@end

Person.m:

#import "Person.h"

//.m文件是类的实现文件(苹果不开源就是我们看不到.m文件,只能看到.h文件)
//在.m中声明的方法必须实现
@implementation Person
//id表示泛型,(泛型:除了基本数据类型之外,他能表示所有对象类型)
//OC中有返回值,同样用return;
-(id)init{ //子类重写父类的方法可以不对这个方法再次声明。
    //OC中 @"" 才表示一个字符串
    _name=@"李四";
    _age=30;
    //self表示当前类的对象。当前对象是正在调用init方法的对象。
    return self;
}
-(void)sayHi{
//    self->_name=@"王五";
    NSLog(@"%@ say hello",_name);//@表示对象,对对象进行站位
}

@end

Audi.h

#import <Foundation/Foundation.h>

@interface Audi : NSObject{
    NSString *logo;//标志
    NSString *color;//颜色
    float price;//价格
}
-(void)run;
@end


//一个文件可以创建很多类,文件跟类没有关系
@interface Phone : NSObject{
    NSString *_brand;
    NSString *_os;
    NSString *_color;
    float _price;
}
-(void)callSomeOne;
-(void)sentMessage;
@end

Audi.m:

#import "Audi.h"

@implementation Audi
-(void)run{
    NSLog(@"audi can fly");
}
@end


@implementation Phone
-(void)callSomeOne{
    NSLog(@"打电话...");
}
-(void)sentMessage{
    NSLog(@"发信息...");
}
@end

main.m

#import <Foundation/Foundation.h>
#import "Person.h"  //导入Person类
#import "Audi.h"    //导入Audi类

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //OC里面开辟内存的方法就是alloc()
        //alloc的功能在堆区开辟内存,然后将首地址传给栈区的P
        //[]在OC中,用来调用方法,在方法调用时分两个部分,第一部分是类名或实例变量名;第二部分就是方法名
        //方法前有+表示这个方法是一个类方法,又叫静态方法,需要用类的名字来调用方法;
        //方法前有-表示这是一个实例方法,又叫动态方法,需要用实例变量来调用
        //创建一个Person类在栈区声明了一个实例变量p;Person类名调用了分配内存的方法alloc,在堆区开辟了一块内存,并将内存首地址返回存放在实例变量p中。
        Person *p = [Person alloc];
        //init方法是初始化方法;他的功能是给实例变量赋初始值;并且将他初始化的内存首地址进行返回。
        p = [p init];
        [p sayHi];
        //init 合起来的写法(创建实例变量,并且初始化),alloc相当于买了一部手机,init相当于给手机初始化,alloc必须要由init,alloc只是开辟空间,init就是给实例变量设置值。系统默认init方式是清空内存(清零)。
        
        Person *p1=[[Person alloc]init];
        //_name设置为public时可以在这里修改,否则报错。
        p1->_name=@"赵六";
        p1->_age=18;
        [p1 sayHi];
        
/*练习4.1 定义奥迪汽车类。声明实例变量和方法,实现方法*/
        Audi *Q5=[[Audi alloc]init];
        [Q5 run];
        
/*练习4.2 定义手机类。声明实例变量和方法,实现方法*/
        Phone *lenove=[[Phone alloc]init];
        [lenove callSomeOne];
        [lenove sentMessage];
    
        
    }
    return 0;
}

/*第一天课程内容总结:
 1、区分类和对象
    类是具有相同特征和行为的一个抽象
    对象是类生成的一个实例变量
 
 2、类的定义
    类的声明在.h文件里,类的实现在.m文件里。
    声明在@interface..@end之间
    实现在@implementation...@end之间
 
 3、对象(实例)的创建
    第一步有alloc分配内存,第二步给对象初始化,
    如:Audi *Q5=[[Audi alloc]init];
 
 4、使用类里面的方法
    看方法的标识,然后调用
    +表示是类的方法,由类直接调用
    -表示的是对象的方法,由对象调用
 
 5、操作类里面的实例变量
    公有的:@public
    保护的:@protected 系统默认的
    私有的:@private
 */










  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值