当前位置: 首页 > news >正文

OC中的属性和成员变量在.h文件和.m文件的不同

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

属性在.h文件中和在.m中声明是有区别的。区别就是,在.h文件中声明的属性,外部类可以通过“类实例.属性”来调用,但在.m中声明的则不可以,获取和设置的方法,只能是通过setValue:forKey和valueForKey来实现。 成员变量,有三种权限,就是大家都知道的@private、@protected、@public ,写在.m文件中时,相当于是@private权限,子类无法访问,验证了一下,做权限修改也无效。而写在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改。


@interface部分为类扩展(extension)。在.m文件中
#import "LCCertificationInformationViewController.h"

// 这就是类扩展
@interface LCCertificationInformationViewController () 
@property ( nonatomic , strong ) UITableView *tableView;
@end

@implementation LCCertificationInformationViewController
- (void)viewDidLoad {
}

其被设计出来就是为了解决两个问题的,其一,定义类私有方法的地方。其二,实现public readonly,private readwrite的property(意思是在h头文件中定义一个属性对外是readonly的,但在类的内部希望是可读写的,所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的)。

类里面还有很多组@interface 和@implementation,这么做用意何在?
举例:类名为:SalesProject
.h文件中包含
@interface  SalesProject :  NSObject  < JsonAndObjectTransformProtocol >
@interface SalesProjectPrimaryInfo : NSObject < JsonAndObjectTransformProtocol>
@interface  SalesProjectStatus :  NSObject
.m文件包含
@implementation SalesProject :  NSObject < JsonAndObjectTransformProtocol>
@implementation  SalesProjectPrimaryInfo :  NSObject  < JsonAndObjectTransformProtocol >
@implementation  SalesProjectStatus :  NSObject
类名与文件名.h.m同名是一般的开发习惯,但不是必须的。多个类也可以写在同一对.h.m文件里的。
没什么实际意义,可能就是不想再多开几个文件了吧。或者这三个类的关系比较密切,就写在一起了。。。


#import <UIKit/UIKit.h>
@interface ViewController1 : UIViewController
@property ( nonatomic , copy , readonly ) NSString *readOnlyStr;
@end

#import "ViewController1.h"
@interface ViewController1 ()
//@property (nonatomic, copy, readwrite ) NSString *readOnlyStr;// 这里去掉注释下面就不会报错
@end
@implementation ViewController1
- ( void )viewDidLoad {
    [super viewDidLoad];
    self .readonlyStr = @"readonlyStr ;// 报错
}

此外,也可在此.m部分声明变量和属性,但声明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private。
.h
@interface ViewController1 ()
{
   
NSString *string; // pirvate 的只能在当前类使用 ;assign 引用计数不加 1
}
@property ( nonatomic , retain ) NSString *string2; //  pirvate 的只能在当前类使用 ;retain 引用计数加 1
.m
NSString *s = [ NSString stringWithFormat : @"string" ];
NSString *s2 = [ NSString stringWithFormat : @"string2"];
string = s;
self . string2 = s2;
NSLog ( @"string 引用计数 :%lu;string2 引用计数 :%lu" , string . retainCount , self . string2 . retainCount ); //string 引用计数 :1;string2 引用计数 :2
NSString *strings = string;
NSString *string2s = self . string2;
NSLog ( @"string 引用计数 :%lu;strings 引用计数 :%lu" , string . retainCount ,strings. retainCount ); //string 引用计数 :1;strings 引用计数 :1
NSLog ( @"string2 引用计数 :%lu;string2s 引用计数 :%lu" , self . string2 . retainCount ,string2s. retainCount ); //string2 引用计数 :2;string2s 引用计数 :2

转载于:https://my.oschina.net/u/2320280/blog/882316

相关文章:

  • 【bzoj】1927 [Sdoi2010]星际竞速
  • Spring Cache无效的问题以及解决办法
  • 北亚案例:oracle数据库误删除数据的恢复方法
  • 安装jdk后出现bash: ./java: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
  • Linux/Unix分配进程ID的方法以及源代码实现
  • 双样本T检验-P-T和T-T检验
  • yaml很好的一个demo
  • statement 、prepareStatement的用法和解释
  • 黑客入侵的常法
  • Myeclipse的默认工作区间怎么恢复提示框?
  • 又拍云刘平阳,理性竞争下的技术品牌提升之道
  • 安装Drush工具 -Centos
  • 服务器篇04-配置apache配置参数
  • jsp页面实现输完密码按回车即可登录
  • 最简单的视音频播放演示样例1:总述
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IDEA 插件开发入门教程
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • js操作时间(持续更新)
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mysql_config not found
  • PhantomJS 安装
  • Redis 中的布隆过滤器
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 对超线程几个不同角度的解释
  • 机器学习学习笔记一
  • 两列自适应布局方案整理
  • 如何进阶一名有竞争力的程序员?
  • 数组大概知多少
  • 用简单代码看卷积组块发展
  • 原生js练习题---第五课
  • 积累各种好的链接
  • (12)Linux 常见的三种进程状态
  • (6)添加vue-cookie
  • (笔试题)合法字符串
  • (独孤九剑)--文件系统
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (一)基于IDEA的JAVA基础12
  • (转)Oracle存储过程编写经验和优化措施
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net Winform开发笔记(一)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 流——流的类型体系简单介绍
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net专家(高海东的专栏)
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .sdf和.msp文件读取
  • @Responsebody与@RequestBody
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [145] 二叉树的后序遍历 js
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android]一个简单使用Handler做Timer的例子
  • [Angular 基础] - 表单:响应式表单