zoukankan      html  css  js  c++  java
  • OC----面向对象

    创建一个类

    comm+n

    实例变量的可见度 @public,@protect@private

    @public  // 共有的,在类的内部和外部都可以进行访问

    @protected   // 受保护的,在类的内部和子类中可以进行访问,实例变量默认是受保护的

    @private   // 私有的,只能在类的内部进行访问,子类中也不可以访问

    OC中方法分为两类:类方法(+)和实例方法(-),其中类方法也叫做静态方法在类方法只能怪不能访问类中的实例变量

     #import"Women.h"  // 循环导入
    @class Women;  // 只是告诉编译器后面只是一个类,但是并没有导入类的借口部分,所以类里面有什么方法和实例变量都不知道,如果想要使用类中的方法和实例变量的时候,需要在.m中再次#import该类。这样就解决了循环导入的问题。我们一般在开发过程中使用@class,在.m里面使用#import

    // 设置器
    - (void)setWife:(Women *)wife;
    // 访问器
    - (Women *)wife;

    自定义初始化(实例方法)

    - (instancetype)initWithName:(NSString *)name
    {
        self = [super init];
        if (self) {
            //self.name = name; // 官方不建议使用
            // _name = name;// 会造成野指针出现,因为_name没有持有传递进来的参数,如果传递进来的参数在外部被释放掉的话,那么就会造成野指针。
            _name = [name retain];
        }
        return self;
    }
    便利构造器 (类方法)
    + (instancetype)personinitWithName:(NSString *)name
    {
        Person *person = [[self alloc] initWithName:name];
        return [person autorelease];  // 在便利构造器中,最后返回的对象后面加autorelease
    }
    #pragma mark - 属性语义控制是copy的内部实现
    - (void)setName:(NSString *)name
    {
        if (_name != name) {
            [_name release];
            _name = [name copy];
        }
    }
    - (NSString *)name
    {
        return _name;
    }
    #pragma mark - 属性语义控制是retain的内部实现

    - (void)setName:(NSString *)name
    {
        if (_name != name) {
            [_name release];
            _name = [name retain];
        }
    }
    - (NSString *)name
    {
        // return [[_name retain] autorelease];  // 当属性为原子性的时候(
        return _name;
    }
    #pragma mark - 属性语义控制是assign的内部实现

    - (void)setName:(NSString *)name
    {
        _name = name;
    }

    - (NSString *):name
    {
        return _name;
    }
    // 重写dealloc
    - (void)dealloc
    {
        [_name release];  // 释放setter方法总成的内存泄露
        [super dealloc];
    }


  • 相关阅读:
    第十二节:WebApi自动生成在线Api文档的两种方式
    第十一节:WebApi的版本管理的几种方式
    自学Python1.3-centos内python3并与python2共存
    自学Python1.2-环境的搭建:Pycharm及python安装详细教程
    自学Python1.1-简介
    Java通过ftp上传文件
    Java使用Spring初识
    Java中类似C#中Task.wait()的类CountDownLatch
    Java创建多线程和线程安全集合Vector
    未能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。
  • 原文地址:https://www.cnblogs.com/pp123/p/4945750.html
Copyright © 2011-2022 走看看