热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OC类属性了解一下class作为属性修饰符

类属性(Objective-CClassProperties)官方解释先看下它在Xcode8release版本中官方给出的解释:Objective-Cnowsupportsclas
类属性 (Objective-C Class Properties)官方解释

先看下它在Xcode8 release版本中官方给出的解释:

Objective-C now supports class properties, which interoperate with Swift type properties. They are declared as: @property (class) NSString *someStringProperty;. They are never synthesized. (23891898)
简单来说就是Objective-C现在支持与Swift类型属性进行交互转换的类属性,这些属性永远不会synthesized,不会生成set和get方法。

就解释来看,似乎Objective-C获得这一功能是提高与Swift的互通性。 向Objective-C添加 class 属性映射到Swift中使用类变量。不过我们可以在OC中使用这个功能,更方便愉快的coding。

用法

我们新建一个TestCar类,同时有一个属性 desc
以便于在其他类访问我们在.h文件里面声明一个属性

@interface TestCar : NSObject
@property (nonatomic, copy, class) NSString *desc;
@end

当我们声明一个class属性的时候,编译器会发出警告!这也就是前面说的They are never synthesized.
这两个属性永远不会synthesized,因此如果我们不显式的添加setter和getter方法,XCode就会提示警告信息使用@dynamic或者是提供setter和getter方法; 注意在getter方法前面使用 + 让其成为一个类的方法

《OC类属性了解一下-class作为属性修饰符》 10.59.43.png

接下来我们简单实现一下set 和 get方法,以便在其他地方调用

static NSString * _desc = nil; //这里我们可以把它声明为静态变量
@implementation TestCar
+ (NSString *)desc{
if (!_desc) {
_desc = [[NSString alloc] init];
}
return _desc;
}
+ (void)setDesc:(NSString *)desc{
_desc = desc;
}
@end

接下来就可以调用了,可以使用类名上的普通点语法访问类属性

TestCar.desc = @"布加迪限量"; NSLog(@"%@", TestCar.desc);

这里就可以正常输出内容了

《OC类属性了解一下-class作为属性修饰符》 10.51.53.png

同时也需要注意的是,由于这是Xcode 8中的LLVM编译器的一项功能,因此它可以在低于iOS 10的环境下使用。

总结一下

假如一个类里面都是类方法,或者想在其他地方访问一个类里面的信息,并且这个类里面还有一些属性的话,那么可以使用class修饰生成类属性,这样调用的时候可以直接使用类名调用,不用再生成一个该类的实例来调用了,使用类属性会更方便一点。
当然想使用这个功能你要付出的就是自己生成set和get方法。想必这不是什么难题!
属性用class修饰同时你也可以修饰为readonly只读,它并不会影响其他功能。


推荐阅读
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在编译 PHP7 的 PDO MySQL 扩展时,可能会遇到 `[mysql_driver.lo]` 错误 1。该问题通常出现在 `pdo_mysql_fetch_error_func` 函数中。本文详细介绍了导致这一错误的常见原因,包括依赖库版本不匹配、编译选项设置不当等,并提供了具体的解决步骤和调试方法,帮助开发者快速定位并解决问题。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 深入理解Java中的多态性概念及其应用
    多态是面向对象编程中的三大核心特性之一,与封装和继承共同构成了面向对象的基础。多态使得代码更加灵活和可扩展,封装和继承则为其提供了必要的支持。本文将深入探讨多态的概念及其在Java中的具体应用,帮助读者全面理解和掌握这一关键知识点。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
author-avatar
赵美晓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有