OC中特性、静态成员(static)以及协议的基本知识

2024-08-21 09:08

本文主要是介绍OC中特性、静态成员(static)以及协议的基本知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特性:@property  @synthesize

   @property是一种新的编译器功能,表示声明了一个新对象的属性;存在于接口部分(interface)。

     例如:@property NSString * name; 表示某类的对象具有NSString类型的属性,其名称为name, 也就是@property NSString * name;取代了-void)setNSString *name;这条语句。

    @synthesize也是一中新的编译器功能,表示创建该属性的访问器;存在于实现部分(implementation)

         @synthesize name;这行代码实现了对name的设置和返回功能,因为编译器遇到@synthesize name;代码时编译器将输出-setNSString *name-getNSString *name方法的已编译的代码。

     注意:特性的局限性:当对象方法中有多个“参数”的情况时不能用@property@synthesize实现。

 

 

 

 

Static:静态成员

      在Objective-C 的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中 。不过可以调用这个类的方法间接的修改这个静态变量的值。

     警告:  static 写在interface外面编译是没有错误的,但是编译器会报警告,这么说这样的写法是不被编辑器认可的。

      错误:static 写在interface里面会直接报错,显然这样的语法是不被认可的。

      static关键字声明的变量必须放在implementation外面,或者方法中,如果不为它赋值默认为0,它只在程序开机初始化一次。

Objective-C中如何实现像C++中那样的静态成员变量:

举例说明使用形式:

    需要做的是在一个类Aimplementation(.m或者.mm)文件中定义一个static变量,然后为A类定义静态成员函数(class method,也就是类方法)来操作该变量。

这样在其它类中你就不需要创建A类的实例来对static变量进行访问。虽然该static变量并不是A类的静态成员变量,但是也算达到了同样的效果。static变量的作用域被限制在单一的文件中。代码可以如下所示:

 

//example.h      

@interface Example : NSObject {     

     

}   

- (id)init;      

+(int)instanceCount;          

@end    

 

 

//example.m      

 #import "example.h"           

static int count;          

@implementation Example      

-(id)init{      

    ifself = [super init]   

    {      

        count+=1;      

    }      

 return self;      

}          

+(int)instanceCount{      

     return count;     

}          

@end    

 

        上面的例子中你就可以通过[Example instanceCount]对静态变量count进行访问,无须创建实例

      +(void)addCount 标志+号后不用创建这个对象通过类名可以直接调用这个静态方法。 而之前方法前用过的-号,标志-号后的方法必须通过本类的对象或者在本来中才可以使用。所以这个方法无需使用这个类的对象调用。
直接使用类名方可调用这个方法

 

 


#import "MyClass.h"
 static int sCount  = 100;
 @implementation MyClass 
 +(void)addCount   
 { 
      sCount ++;  
      NSLog(@"静态整型变量的值为:%d", sCount);
 } 
 @end   

 

 

协议:protocol

  一个子类只能继承一个父类,但子类可以使用多个协议。采用协议的方法是在类的@interface声明中列出协议的名称,采用协议意味着你必须实现协议中的所有方法,否则会产生警告。

   例如:已经创建好了一个类Gun,他继承的父类是Arm,同时我也声明好了一个协议Sound,则Gun采用协议Sound的形式如下:@interface GunArm  <Sound>

   当采用多个协议时格式如下:

        @interface GunArm  <SoundRead.....>

  内存管理:当你使用alloccopy或者new方法获得一个对象时,该对象的保留计数器的值为1,而且你要负责释放它(当然,如果有自动释放池就不用了)。

 

这篇关于OC中特性、静态成员(static)以及协议的基本知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092728

相关文章

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重