特性:@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++中那样的静态成员变量:

举例说明使用形式:

需要做的是在一个类A的implementation(.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"

staticintcount;

@implementation Example

-(id)init{

if(self = [super init])

{

count+=1;

}

returnself;

}

+(int)instanceCount{

returncount;

}

@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 Gun:Arm

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

@interface Gun:Arm

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

oc 协议 回调 静态成员_OC中特性、静态成员(static)以及协议的基本知识相关推荐

  1. 静态成员 java_JAVA中的静态成员

    //Java中的静态成员 /* *静态的成员变量是属于类的,不属于某个对象,是共享的. * 访问时可以用类名.静态属性直接访问,也可以用对象.访问,后者不提倡. * 静态的成员方法只能访问静态的成员 ...

  2. 关于Java中何时使用static和工具类相关知识

    2019独角兽企业重金招聘Python工程师标准>>> 一.使用static修饰变量:当对象中出现共享数据时,该数据被静态修饰,对象中的特有数据要定义成非静态存放于堆内存中. 二.使 ...

  3. oc 协议 回调 静态成员_深入iOS系统底层之静态库

    少长咸集,群贤毕至.--<王羲之・兰亭集序> 目标文件 目标文件结构 程序员编写的是源代码,而计算机运行的则是CPU能识别的机器指令,因此必须要有一系列工具或程序来将源代码转化为机器指令, ...

  4. C++中的静态成员变量

    文章目录 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 1 C++中的静态成员变量 1.1 C++中静态成员变量的使用方法 在C++中可以定义静态成员变量: 静态成员变量属于整个 ...

  5. CPPDay05 C的静态成员,类的静态成员,单例模式,静态成员函数,继承(面向对象三大特性,高类聚,低耦合),继承方式(private,protected,public)多重复杂继承,虚继承

    目录 0x00 C中的静态成员: 0x01类的静态成员: 0x02单例模式: 0x03静态成员函数: 0x04继承: 0x05继承方式: 0x06多重复杂继承: 0x07虚继承: 0x00 C中的静态 ...

  6. C++中的静态成员函数

    文章目录 1 C++中的静态成员函数 1.1 C++中静态成员函数的使用 1 C++中的静态成员函数 1.1 C++中静态成员函数的使用 C++中的静态成员函数: 静态成员函数是类中特殊的成员函数. ...

  7. 深入解析C++编程中的静态成员函数

    这篇文章主要介绍了深入解析C++编程中的静态成员函数,是C++入门学习中的基础知识,需要的朋友可以参考下 C++静态成员函数 与数据成员类似,成员函数也可以定义为静态的,在类中声明函数的前面加stat ...

  8. 类中的静态成员函数访问非静态成员变量

    http://blog.csdn.net/u011857683/article/details/52294353 1.思路: 静态成员函数属于类(通过类访问,调用函数时没有提供this指针), 非静态 ...

  9. JAVA中的静态成员

    //Java中的静态成员 /**静态的成员变量是属于类的,不属于某个对象,是共享的.* 访问时可以用类名.静态属性直接访问,也可以用对象.访问,后者不提倡.* 静态的成员方法只能访问静态的成员*/cl ...

最新文章

  1. 2019秋招AI岗位竞争究竟有多激烈?
  2. python教程自带数据库_python教程自带数据库 | Python学哪个数据库
  3. 《异构信息网络挖掘: 原理和方法(1)》一第2章 基于排名的聚类
  4. Hadoop核心生态
  5. Silverlight 4 初学者的10大经典问答
  6. 【Python-3.3】win7 安装pip
  7. 瞒不住了!超过4000人都在这里死磕3D视觉技术
  8. VMware Workstation 的 MacOS 解锁补丁 Unlocker 3.0.4
  9. 国内可以使用的英文搜索引擎
  10. GeekPwn再现碟中谍场景 黑客肆意控制智能摄像头
  11. 求点赞、被点赞,社交网络用户对点赞又爱又恨
  12. JavaScript实现分页显示
  13. sqlserver 查询练习
  14. 百度音乐api+c语言,百度音乐API全接口
  15. 二十年后我发明了保姆机器人作文_未来的保姆机器人作文
  16. 扫地机器人黑色耐脏吗_扫地机器人这么火?可你真的知道怎么选才不会入坑吗?...
  17. 树莓派远程视频监控的移植pistreaming
  18. 天润融通入选最具活力云计算服务商,拔得呼叫中心领域头筹
  19. 还有其他方法把梳子卖给和尚吗?(
  20. 博客园页面定制html代码,博客园主题分享

热门文章

  1. 多线程 之 生产者与消费者
  2. 捕获 PHP 致命错误 Fatal Errors
  3. Leetcode 53.最大子序列和
  4. 循环双链表的手动构建总结
  5. pytorch: torch.nn.functional.affine_grid(theta,size)
  6. pytorch 与numpy 部分操作的对应关系
  7. C#通过COM组件调用IDL的pro程序
  8. 2018福大软工实践第七次作业
  9. HDU5726(RMQ二分)
  10. DOM2和DOM3读书笔记