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方法来管理成员 ...
随机推荐
- 多个DataSet数据合并
DataSet ds = myIAppSet.GetHomeHottestList(siteID, , time); ].Rows.Count > ) { ds.Merge(ds1); } Me ...
- android 扫描
http://blog.csdn.net/abidepan/article/details/11902041
- 【学习笔记】ES6标准入门
这里简要记录一下对自己感触比较深的几个知识点,将核心的应用投放于实际的项目之中,提供代码的可维护性. 一.let和const { // let声明的变量只在let命令所在的代码块内有效 let a = ...
- dataguard不同步问题ora-16191解决
公司的11g的dataguard主备不同步,检查步骤如下: Primary:查询主库的最大日志 SQL> select max(sequence#) from v$archived_log;SQ ...
- 【原】iOS学习47之第三方-FMDB
将 CocoaPods 安装后,按照 CocoaPods 的使用说明就可以将 FMDB 第三方集成到工程中,具体请看博客iOS学习46之第三方CocoaPods的安装和使用(通用方法) 1. FMDB ...
- Who's in the Middle[HDU1157]
Who's in the Middle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- 天猫登录源码 POST C#
HttpHelper 请从网络中搜索: public partial class LoginTMall : Form { public LoginTMall() { InitializeCompone ...
- vmware克隆虚拟机后配置网络
一件配置: rm -rf /etc/udev/rules.d/70-persistent-net.rules cd /etc/sysconfig/network-scriptsrm -rf ifcfg ...
- MySQL黑科技用法总结(持续更新)
1.利用set插入数值 insert [into] 表名 set 列=值. 2.利用select对字段进行测试 ) ,并且有2条记录 ',num1+1的计算结果 tips:相等返回1,否则返回0 f ...
- PHP关于反斜杠处理函数addslashes()和stripslashes()的用法
addslashes() 例子: <?php $str = "Who's John Adams?"; echo $str . " This is not safe ...