zoukankan      html  css  js  c++  java
  • ios开发之OC基础-类和对象

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点。建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再将零散的知识点整理出来。这样的学习方法会带来更多的收获,同时要多做练习,按照思路,默写、改写代码。在这里,感谢欧阳坚老师,学习你的课程使我走上了ios的开发之路。

    一定要明确一个要从事的方向,要不然就会感到迷茫。学习ios开发,并且从事ios开发这个行业,这就是我的选择。看到我的博客系列文章,其中大多是关于C++、Qt、Linux网络编程、OpenGL、Unity3D等方面。从表面上看和ios开发似乎没有多少关联,但是有了这些方面的学习经验给我带了一定的基础。ios开发主要用oc和swift语言,而oc是从事ios开发的基础。众所周知,oc(objective-c)即面向对象的C,在C语言的基础上增加了面向对象的机制和内存管理这一对翅膀,使得OC在做ios开发如虎添翼。

    本系列文章仅供个人学习和分享给志同道合的猿友,不存在商业用途。

    OC是一门面向对象的语言,既然是面向对象就少补了类和对象。我们知道在C++中面向对象的三大机制:继承、封装、多态,这在OC中也同样具备。下面就具体说一下OC中的类和对象。

    类的定义

    类是由属性和方法组成的,属性表示类的特征,方法表示类的动作。

    类的定义格式

    OC中的类定义和C++中的类定义有些不同,在OC中类的头文件为***.h,而源文件却是以.m为后缀的文件-***.m。

    接口在头文件中:

    @interface 类名:基类名称{
         //属性名称
    }//这里不加";"号
         //方法声明
    @end//声明结束

    类名首字母需要大写,NSObject是OC所有类的基类,接口中只包含方法的声明,方法有类方法和实例方法。

    实现在源文件中:

    @implementation 类名
    //方法实现
    @end

    类的访问权限

    有三种访问权限:@public,@private,@protected。属性默认的权限是保护类型,方法默认的权限是公有类型。

    OC中的构造函数以initWith***开头,主要做一些初始化工作,析构函数为dealloc,如果自己写类没有定义,系统会自动提供一个默认的构造函数和析构函数。

    举个例子说明一下,如下代码:

    -(id) init{
        self = [super init];
        //使用super父类对象,self表示本类对象
        if(self){
            
            NSLog(@“在构造函数中name %@ age%d %s”,_name,_age,_FUNCTION_);
        }
        return self;
    }
    
    -(id)initWithName:(NSString *)newName{
        
    }
    
    -(id)initWithName:(NSString*)newName withAge:(int) newAge{
    }
    -(void)dealloc{
        //析构函数在对象完全消失的时候调用
        //对象销毁时调用,对象计数器=0
        //dealloc不要手动调用[person dealloc],应该调用[person release];
        //release销毁对象,release计数器减一,减到0就自动调用dealloc。
        [super dealloc];
    }

    在OC中也可以使用"obj->arrt"的形式访问和设置属性字段,但前提是该字段必须被声明为公有类型。但是这种方式不建议使用。

    #import<Foundation/Foundation.h>
    @interface Person:NSObject{
    @public
        int _age;
        NSString *_name;
    }
    -(void) setAge:(int)age;
    -(int)getAge;
    @end
    @implementation Person
    -(void) setAge (int)age{
        _age = age;
    }
    
    -(int)getAge{
        return _age;
    }
    @end
    
    int main()
    {
        @autoreleasepool{
            Person *person = [[Person alloc] init];
            person->age = 20;
            person->name = @”小红”;
        }
        return 0;
    }

    Person *person = [[Person alloc] init]就是person指向的对象分配了内存空间,并进行了初始化。也可以用Person *person = [Person new],OC中也支持new运算符。因为age、name字段被声明为public类型,所以可以使用指针调用的方式来设置对象的属性。

    参数标签

    -(Person *)init:(int) newID:(int) newAge;//没有使用参数标签
    
    -(Person *)initWithID:(int) newID andAge:(int) newAge;//使用参数标签

    第一个参数可以不带标签,从第二个参数开始可以带标签。现在的方法名为:initWithID:andAge:,参数标签可以提高方法名的可读性,同时还可以用于方法的重载。

    方法重载

    在OC中,方法的重载不像C++那样可以通过,参数类型,参数个数进行区分了。OC中不是严格的函数重载。

    //方法名相同并且参数个数相同但参数类型不同,在OC中构不成方法重载
    -(int) doSth:(int) x;
    -(int) doSth:(float) x;
    
    -(int) doSth:(int) x:(int) y;
    -(int) doSth:(float) x:(float) y;
    
    //用参数标签可以构成方法重载
    -(int) doSth:(int) x:(int) y;
    -(int) doSth:(float) x andY:(float) y;
  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/tgycoder/p/5569424.html
Copyright © 2011-2022 走看看