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];
}
OC----面向对象的更多相关文章
- OC面向对象—封装
OC面向对象—封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量).继承和多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴 ...
- OC面向对象—继承
OC面向对象—继承 一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...
- 李洪强iOS开发之OC面向对象—多态
OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...
- OC面向对象的三大特征
OC面向对象的三大特征 1.OC面向对象的三大特封装 1)封装:完整的说是成员变量的封装. 2)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可 ...
- OC面向对象特性:封装
概念性知识 1.c语言是面向过程编程:分析解决问题的步骤,实现函数,依次调用 2.oc语言是面向对象编程:分析问题的组成的对象,协调对象间的联系和通信,解决问题 3.#include和#impo ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- OC面向对象多态笔记
面向对象的多态是建立在继承上,可以说没有继承就没有多态: 多态:父类指针指向了子类的对象: int main() { //假设已定义了Animal类和它的子类Dog,那么多态的代码体现就是 Anima ...
- OC面向对象的三大特性
一.面向对象的三大特性:封装(成员变量).继承和多态 1. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员 ...
随机推荐
- Nodejs学习笔记(十二)--- 定时任务(node-schedule)
目录 写在之前 Cron风格定时器 通配符解释 范围触发 递归规则定时器 对象文本语法定时器 取消定时器 写在之后 写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发 ...
- 编译带有PROJ4和GEOS模块的GDAL
1.下载三个软件的源代码(去各自官网下载即可) 2.将PROJ4和GEOS的源码放到GDAL目录下的supportlibs文件夹中. 3.修改GDAL的nmake.opt文件,部分内容如下: # Un ...
- php curl 例子
get方式: set_time_limit(0); $url ='http://xxxxxxxx?pwd=wJ2312&s=1&e=2&d=1&t=asc ...
- life_motto
simple,dedicated,healthy life style,love those u love...
- CocoaPods安装和使用
CocoaPods是iOS最常用的第三方类库管理工具,绝大部分有名的开源类库都支持CocoaPods. CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境.幸运的是OS X系统默 ...
- win下sass安装失败的一种可能
首先声明,本篇转自CSDN的LZGS_4. 今天我也遇到这个问题,就把文章擅自转载了,方便自己也方便更多的人吧. 因为sass和compass依赖于ruby环境,所以装之前先确认装了ruby.可到官网 ...
- PK淘宝BUY+,京东推出AR购物应用JD Dream
今年双十一淘宝推出了虚拟现实VR购物"BUY+",用户可以在虚拟环境中选购商品.那作为竞争对手的京东将使出什么绝招呢?在近日上海举办的谷歌开发者大会上得到了答案.会上京东推 ...
- Bulk_Collect 调用方式集锦
事先申明,本文所有示例都皆源于<Expert PL SQL Practices>这本电子书的第六章.小陈觉得在学习PLSQL的过程中,将来或许会用到,在此笔记一番. 正文如下: 首先准备基 ...
- BZOJ3069: [Pa2011]Hard Choice 艰难的选择
Description Byteasar是一个很纠结的人.每次他经过Bytetown的时候都知道有至少2条不同的路径可以选择,这导致他必须花很长时间来决定走哪条路.Byteasar最近听说了Bytet ...
- 06@LabVIEW发布功能总结
前言 在没有接触到LabVIEW强大的发布功能前,我时常发愁如何把自己的工具包给别人装上,有时候为了一些特定的安装,需要自己写一个一键安装的程序,时间长了发现还不如直接复制来的快,就是苦了那些用工具包 ...