知其然,更要知其所以然,开发中很多时候我们只知道那样能用,但是具体有何区别,却无从说起,这里我们就来对iOS里的self和_做一个区分,好更明白其差异性:
同时我们发现在我们访问我们声明的变量时,会有self. 和 以"_"开头的访问方式,那么这两种方式到底有什么样的区别呢?
我们来一起看一下:
@property (retain, nonatomic) NSMutableArray *nameArray;
self.nameArray是访问属性的,而_nameArray是访问实例变量的.
属性是实例变量加上GET,SET方法的一个整合体,他主要是承担一个外部访问的一个接口!
实例变量只能在本类中才可以访问,外部不可以访问!
总的原则:
在类内部访问变量的时候用“_”;
在类外部也就是其他类里访问这个类的变量时用“.” 语法;
注意事项:
手动管理内存的情况下:
使用“.”语法来初始化变量的时候,会产生内存泄漏的问题:
self.nameArray = [NSMutaleArray alloc] init];
上述代码,造成的问题是,在self.nameArray的时候相当于调用了set方法,引用计数+1,后面alloc的时候,引用计数再次+1。
在我们最后dealloc中release的时候,引用计数只减了一次,并没有完成全部释放,这样就造成了内存泄漏的问题。
解决方法:就是用“_”来初始化以及访问变量,这样就不会产生内存问题,虽不是什么高明的办法,但的确有效。
_nameArray = [NSMutaleArray alloc] init];
上述便是“.”和“_”在使用的时候的简单区别。
如果是在ARC(自动管理内存)的情况下虽然不存在上述问题,但从编码规范来考虑,还是注意点儿的好。
相关推荐
本示例"iOS tableview_demo_mvvm"就是关于如何在iOS应用中结合UITableView与MVVM模式进行实践的一个新手学习记录。 首先,我们来理解一下MVVM模式的核心概念: 1. Model(模型):代表业务逻辑和数据,是应用中的...
2. **类别(Category)的作用与继承的区别** 类别可以在不修改原有类代码的情况下为其添加方法,但不能删除或修改已有方法。类别常用于分发实现、创建对私有方法的前向引用以及添加非正式协议。而继承则允许增加、...
首先,我们需要了解iOS中的两种主要控件,它们可以用于模拟下拉列表的效果: 1. `UITableView`:这是一个非常灵活的控件,通常用于显示列表数据。我们可以创建一个`UITableView`,并在用户点击时展示预定义的选项。...
在iOS开发中,原生应用(Native App)与HTML5(H5)页面的交互是一个常见的需求,特别是在构建混合应用时。"jsdemo_iOS原生h5交互_源码"是一个示例项目,旨在展示如何实现这种交互。在这个项目中,开发者可以找到已...
然而,关于在`init`和`dealloc`中使用`self.xx`与`_xx`的注意事项,存在一些潜在的风险和最佳实践。下面将详细解释这些概念,并阐述为什么应该避免在这些特定情境下使用`self.xx`。 首先,我们来了解`init`方法。当...
iOS 中的定时器使用教程 iOS 中的定时器使用教程是 iOS 开发者们不可或缺的一部分,本文将详细介绍 iOS 中最全的各种定时器的使用教程,使得开发者们更好地理解和使用定时器。 NSTimer 是 iOS 中最基本的定时器,...
本文将详细探讨“BaiduMap_IOSSDK_v6.1.0_Sample.zip”中的核心知识点,包括SDK的主要特性、API的使用以及示例代码的解析,助力开发者构建高效、稳定的iOS地图应用。 一、百度地图SDK概述 百度地图iOS SDK...
iOS 获取系统通讯录的名字和电话【srxboys】【第二版】 同时兼容 iOS6 / 7/8/9/10 等等 所有版本 可以看淘宝 收货地址 亲测 实现 > iOS6 代码例子: //初始化对象 在viewDidLoad __weak typeof(self)weakSelf = ...
单例模式是软件设计模式中的一种,它在iOS开发中被广泛应用,特别是在管理全局资源、配置或者需要跨类共享的对象时。单例模式的核心思想是确保一个类只有一个实例,并提供一个全局访问点,使得所有对象都可以通过这...
在iOS开发中,数据安全是至关重要的,尤其是在处理用户敏感信息时。Swift作为一种现代、安全的编程语言,提供了丰富的库来支持加密操作。本话题主要关注的是使用Swift实现的HMAC(Hash-based Message Authentication...
微博iOS SDK SSO OAuth是微博官方提供的一种授权方式,用于在iOS应用中集成微博功能,让用户能够方便地通过微博账号登录、分享内容等。本文将详细介绍这个SDK的使用,包括SSO(Single Sign-On,单点登录)和OAuth...
在iOS开发中,Objective-C(OC)是一种动态类型的语言,其核心特性之一就是Runtime。Runtime是OC的幕后黑手,它允许程序在运行时检查、修改对象的行为,从而赋予了OC许多灵活的功能。本文将深入探讨`objc_...
**iOS中的Key-Value Observing (KVO)技术详解** Key-Value Observing(KVO)是Objective-C中的一种机制,允许对象监听并响应其他对象属性的变化。在iOS开发中,KVO是一种强大的数据绑定工具,它使得我们可以方便地...
在iOS开发中,JavaScript与Objective-C的交互是一个常见的需求,特别是在构建混合应用或者利用Web技术增强原生应用功能时。本篇文章将详细讲解如何在iOS中实现JavaScript与Objective-C的双向通信,主要涉及Webview的...
iOS 8之后,苹果推出了Self-Sizing,可以自动调整cell的高度,但是只能用在iOS 8之后的项目,如果要兼容iOS 7,请看我的github:https://github.com/Zhangyanshen
在iOS开发中,代理模式是一种常见的设计模式,用于对象间通信。它允许一个对象(委托者)将某些任务委托给另一个对象(代理),这样可以实现松耦合,提高代码的可读性和可维护性。标题“ios中的代理设置模式”正是...
本示例将详细介绍如何在 Flutter 应用中通过 `MethodChannel` 与 iOS 进行交互。 首先,我们需要在 Flutter 项目中创建一个 `MethodChannel` 实例。这个实例需要指定一个唯一的频道名称,这个名称将在 Flutter 和 ...
addEvent(input, 'click', function(){//ios and android addClass(self._button, self._settings.focusClass); }); 全兼容的事件;touchstart兼容IOS
本教程将详细探讨iOS中的Web与JavaScript交互的四种方法,以帮助开发者更好地理解和利用这一特性。 首先,我们要知道`UIWebView`和`WKWebView`是iOS中用于加载和展示网页内容的组件。`UIWebView`是早期的选项,而`...
本文将详细探讨在类方法中使用`self`的关键注意事项,以帮助开发者更好地理解和避免潜在的问题。 首先,理解Objective-C中的`self`关键字。在类方法中,`self`代表的是类本身,而在实例方法中,`self`则是指向当前...