iOS 学习如何声明私有变量和私有方法
私有变量
首先来说 OC 中没有绝对的私有变量,这么说基于两点原因:
1可修改: 通过KVC 键值编码 来修改私有成员变量的值
2可读取 : 通过底层runtime 获取实例变量Ivar 对应私有值
但是private的存在意义也很明确 不希望被当前类 以外的外界得知.
声明方式
@private : 作用只能是在自己类
@protected :通常 我们都对变量不做特别约束,只是主观调控其使用 那么就是默认 @protected, 作用范围是自身类 和 继承自身的子类
@public: 作用范围高于@protect 高于@private 在任何地方调用.
私有变量和不希望被外界直接访问的变量应该写在.m文件里面. 如果希望被访问的 @protected 和 @public 应该放在.h文件里面声明
使用举栗子:
#import <Foundation/Foundation.h> @interface MethodDetailMusic : NSObject
{
@public NSString *publicStr;
} @property (nonatomic, strong) NSString * img_url;
@property (nonatomic, strong) NSString * amount;
@property (nonatomic, strong) NSString * time;
@property (nonatomic, strong) NSString * title;
@property (nonatomic, strong) NSString * url;
@property (nonatomic, strong) NSString * method_id; - (void)initPrivateString; @end
#import "MethodDetailMusic.h" @interface MethodDetailMusic()
{
@private NSString *specialPrivateString;
} //声明一个私有方法
- (void)createPrivateFunction; @end @implementation MethodDetailMusic - (void)createPrivateFunction
{//TODO:实施一个私有方法 } - (void)initPrivateString
{
if (!specialPrivateString) {
specialPrivateString = @"我是私有变量";
}
NSLog(@"%@",specialPrivateString);
}
- (void)viewDidLoad {
[super viewDidLoad];
[self test1];//调用
} - (void)test1
{
MethodDetailMusic *music = [[MethodDetailMusic alloc]init];
music.title = @"haha";
[music initPrivateString];//这里 调用类本身的实例方法有一处日志 NSLog(@"\n title:%@ \n",music.title); //可修改: KVC 键值编码 修改私有变量
[music setValue:@"修改私有变量的值" forKey:@"specialPrivateString"];
[music initPrivateString]; //可读取 #import <objc/runtime.h> 获取私有变量
//定义一个实例变量 privateString
Ivar privateString = class_getInstanceVariable([music class], "specialPrivateString");
NSString *privateStr = object_getIvar(music, privateString);
NSLog(@"打印私有变量===%@",privateStr); music->publicStr = @"我是公有变量"; [self viewControllerPrivateFunc]; }
log 日志:
2016-08-17 14:36:23.860 LearningTheroyDemo[10907:5802354] 我是私有变量
2016-08-17 14:36:23.860 LearningTheroyDemo[10907:5802354] title:haha
2016-08-17 14:36:23.860 LearningTheroyDemo[10907:5802354] 修改私有变量的值
2016-08-17 14:36:23.861 LearningTheroyDemo[10907:5802354] 打印私有变量===修改私有变量的值
私有方法声明
方法1:就是在.m文件里面声明的方法 只能在当前页面调用 (在.h文件中声明的方法 是可以被外界调用的)
如代码music 模型中 .m方法里私有方法的声明和实施
方法2: 建立类别(也有人管这个叫分类), 网上有人 认为 在这里建立 是对应类的私有方法.
但是我并不这么认为,我主要使用类别分散代码. 一块 一块很规矩 可读性明显增强,如果在第三个类里面写声明 还是可以调用的, 但是如果你就想当私有方法的话 也并没有太大问题.使用条件 你都清楚了.写错就赖你自己没注意约束条件吧.
(如果觉得我说的有错误 求指正,不要放过 我写出的bug 给我提bug 我一定会执行反馈的!!!)
iOS 学习如何声明私有变量和私有方法的更多相关文章
- 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法
一:函数表达式和函数声明 1:函数声明和函数表达式的区别 ①函数声明不需要分号结尾 ②函数声明有函数提升的特点 ③函数声明后面不能跟圆括号直接调用,因为javascript将function关键字当作 ...
- JavaScript 执行环境(执行上下文) 变量对象 作用域链 上下文 块级作用域 私有变量和特权方法
总结自<高程三>第四章 理解Javascript_12_执行模型浅析 JS的执行环境与作用域 javascript高级程序第三版学习笔记[执行环境.作用域] 在javascript ...
- python 类的私有变量和私有方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @Fil ...
- 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...
- Python保护变量、私有变量、私有方法
保护变量.私有变量.私有方法介绍: _xxx: 单下划线开头叫保护变量,意思是只有类对象和子类对象自己能访问到这些变量,此变量不能通过from XXX import xxx 导入: __xxx : 双 ...
- Python类中的 私有变量和私有方法
默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...
- js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)
js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...
- iOS 运行时runtime控制私有变量以及私有方法
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动 ...
- [python] 私有变量和私有方法
1.在Python中要想定义的方法或者变量只在类内部使用不被外部调用,可以在方法和变量前面加 两个 下划线 #-*- coding:utf-8 -*- class A(object): name = ...
随机推荐
- Shiro学习(总结)
声明:本文原文地址:http://www.iteye.com/blogs/subjects/shiro 感谢开涛提供的博文,让我学到了非常多.在这里由衷的感谢你,同一时候我强烈的推荐开涛的博文.他的博 ...
- Python 2.7 中使用 Print 方法
print ("test",file=name)类似的方法在python 2中需要先引入 __future__才可使用 import __futhure__ import prin ...
- JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。
JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上. Java(由 Sun 发明)是更复杂的编程语言. ECMA-262 是 JavaScript 标准的官方名称. Jav ...
- ubuntu 中wget (下载)命令用法
Linux wget是一个下载文件的工具,它用在命令行下. 对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器 1.使用wget下载单个文件 ...
- 涉及spring的相关概念
1.pojo 2.为了降低java开发的复杂性,spring采用了4中策略 (1).基于POJO的轻量级和最小侵入性编程 (2).通过依赖注入和接口编程实现松耦合 (3).基于切面和惯例进行声明式编程 ...
- 百度-设置-搜索设置-每页显示50条-保存设置-打印alert信息-accept确定
一.场景: 代码: #coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.action_chains im ...
- 分享一个编译期输出TODO,FIXME列表的宏
效果,双击能跳到相应位置: >------ Build started: Project: TestVS2013, Configuration: Debug Win32 ------ > ...
- python提供了一个进行hash加密的模块:hashlib
python提供了一个进行hash加密的模块:hashlib下面主要记录下其中的md5加密方式 import hashlib data1 = 'sada' #####字母和数字 m = hashlib ...
- Linux之(Git)服务之windows配置
设置你自己的昵称与email设置本地机器默认commit的昵称与Email. 请使用有意义的名字与email. git config --global user.name "syavingc ...
- linux 文本编辑器
文本编辑器 文本编辑器是Linux操作系统中的重要工具.其中,VI是使用最广泛的文本编辑器,其可以在任何shell中使用.此外,Red Hat Enterprise Linux6 还提供了gedit工 ...