创建一个类

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];
}

OC----面向对象的更多相关文章

  1. OC面向对象—封装

    OC面向对象—封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量).继承和多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴 ...

  2. OC面向对象—继承

    OC面向对象—继承 一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). ...

  3. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  4. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...

  5. 李洪强iOS开发之OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  6. OC面向对象的三大特征

    OC面向对象的三大特征 1.OC面向对象的三大特封装 1)封装:完整的说是成员变量的封装. 2)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可 ...

  7. OC面向对象特性:封装

    概念性知识  1.c语言是面向过程编程:分析解决问题的步骤,实现函数,依次调用  2.oc语言是面向对象编程:分析问题的组成的对象,协调对象间的联系和通信,解决问题  3.#include和#impo ...

  8. iOS - OC 面向对象语法

    1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...

  9. OC面向对象多态笔记

    面向对象的多态是建立在继承上,可以说没有继承就没有多态: 多态:父类指针指向了子类的对象: int main() { //假设已定义了Animal类和它的子类Dog,那么多态的代码体现就是 Anima ...

  10. OC面向对象的三大特性

    一.面向对象的三大特性:封装(成员变量).继承和多态 1. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员 ...

随机推荐

  1. C#中对string与string[]的初步操作

    开篇之作,简单的对string与string[]进行初步操作,入门篇也,不多说,直接上代码. using System; using System.Collections.Generic; using ...

  2. hadoop2的思想架构

    mapreduce 2 思想架构 mr2解决了mr1的jobTracker的单点颈瓶问题,这个问题会影响hadoop的扩展性,集群的可靠性,mr1中jobTracker负责集群作业的分发,管理,调度, ...

  3. 【Java EE 学习 29 下】【JDBC编程中操作Oracle数据库】【调用存储过程的方法】

    疑问:怎样判断存储过程执行之后返回值是否为空. 一.连接oracle数据库 1.需要的jar包:在安装的oracle中就有,所以不需要到官网下载,我的oracle11g下:D:\app\kdyzm\p ...

  4. Codeforces Round #363 (Div. 2)

    A题 http://codeforces.com/problemset/problem/699/A 非常的水,两个相向而行,且间距最小的点,搜一遍就是答案了. #include <cstdio& ...

  5. 破解加密PDF文件pdfcrack

    破解加密PDF文件pdfcrack   PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...

  6. win10 系统怎么获取最高管理员权限删除文件

    http://www.xitongcity.com/jiaocheng/win8_content_3473.html 很多win8.1系统用户在对磁盘文件进行清理时,经常会遇到“文件夹访问被拒绝,您需 ...

  7. 同步、更新、下载Android Source & SDK from 国内镜像站(转载)

    同步.更新.下载Android Source & SDK from 国内镜像站 转自: 同步.更新.下载Android Source & SDK from 国内镜像站 Download ...

  8. [数据库]cakephp操作ENUM、tinyint等类型的一点说明

    之前无法正常更新ENUM类型的数据,感觉是框架函数实现的bug. 问题很诡异,因为INIT的时候是可以成功写入的,没理由UPDATE的时候不成功. 前后琢磨了一下午,发现了一点蛛丝马迹才终于想通.问题 ...

  9. 2016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:5分钟安装 30分钟入门和浏览常用命令

    14:59 2016/1/112016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:注意问题:1.手动安装2.5.0和pear安装方式都成功但是执行时无任何反映, ...

  10. Testing with a mocking framework (EF6 onwards)

    When writing tests for your application it is often desirable to avoid hitting the database.  Entity ...