1.控制变量作用域的指令

@protected 默认,可以被该类访问及任何子类方法调用

@private 可以在该类中访问,但不能不能在子类定义的方法直接访问

@public 可以被该类访问,也可以被其他类访问

@package 可以在实现该类的图像的任何地方访问这个实例变量

2.类的初始化 initWith

@interface Fraction:NSObject
int n ;
int d ;
-(Fraction *) initWith:(int) n:(int) d;
-(void) setTo:(int)n over:(int)d;
-(void) print;
@end

@implementation Fraction
-(Fraction *) initWith:(int) n :(int) d
{
self = [super init];
if(self)
[self setTo:n over:d];
return self;
}
-(void) setTo:(int)n1 over:(int)d1
{
n = n1;
d=d1;
}
-(void) print
{
NSLog(@"%i/%i",n,d);
}
@end

主程序:

Fraction * f = [[Fraction alloc] initWith:1:3];//初始化的同时赋值
[f print];
[f release];

这样就可以在初始化的同时为其变量赋值~

3.外部变量

int gGlobalVar = 5;

在程序开始处,在所有方法、类定义函数定义之外编写。

extern int gGlobalVar;
NSLog(@"%i",gGlobalVar);
gGlobalVar = 100;
NSLog(@"%i",gGlobalVar);

终端显示的结果:

5

100

外部变量可以被任何方法或函数访问和更改其变量的值,只是要访问时需在前面加上extern,这就告知系统,要访问的是其他文件中定义的全局变量

4.静态变量

只希望全局比昂两在特定的模块/文件是全局的,这时候我们可以把变量设为static的,变成静态变量,那么外部就访问不了了~

如:static gGlobalVar = 0;

那么在这个文件中,这条语句之后的方法函数都可以访问这个变量,但其他文件中的方法和函数则不行。

下面用一个例子来演示静态变量。

我们在Fraction方法中重载alloc的方法并让它使静态变量count增加

@interface Fraction:NSObject
int n ;
int d ;
-(Fraction *) initWith:(int) n:(int) d;
-(void) setTo:(int)n over:(int)d;
-(void) print;

+(Fraction *) allocF;
+(int) count;
@end

static gCounter;//全局的静态变量

@implementation Fraction
-(Fraction *) initWith:(int) n :(int) d
{
self = [super init];
if(self)
[self setTo:n over:d];
return self;
}
-(void) setTo:(int)n1 over:(int)d1
{
n = n1;
d=d1;
}
-(void) print
{
NSLog(@"%i/%i",n,d);
}
+(Fraction *) allocF
{
//重载alloc并不是很好的编程方式,因为这个方式处理内存的物理分配,不应涉及那个领域
extern int gCounter;
++gCounter;
return [Fraction alloc];
}
+(int) count
{
extern int gCounter;
return gCounter;
}
@end

主程序:

Fraction *a,*b,*c;
NSLog(@"Fraction allocated:%i",[Fraction count]);
a = [[Fraction allocF]init];
b = [[Fraction allocF]init];
c= [[Fraction allocF]init];
NSLog(@"Fraction allocated:%i",[Fraction count]);

[a release];
[b release];
[c release];
[pool drain];

结果为:

程序开始时gCounter值会自动设为0,然后每特殊初始化一次,gCounter值会增加一次,最终初始化三次所以gCounter的值被设置为3。

*静态变量有默认的初始值0

5.存储类型说明符

如:extern static 下面讨论更多的说明符

1)auto 自动局部变量-进入该快语句时自动为其分配存储空间~类似C#里面的using()吧

auto int index;//没有默认的初始值

2)const 类似C#的常量-恒定不变的值,count变量在自文档编制过程(self-documentation process)中很有帮助

const double pi = 3.141592654; //圆周率~~

3)volatile 和const相反,这个说明符告诉编译器,这是一个会改变的量…涉及到指针操作~囧。

*outPort ='0';

*outPort = 'N';

通常情况下第一行表示在outPort制定的内存地址存储字符0,

第二行则表示同一位置存储字符N。

一个智能的编译器会发现在也同意地址进行了连续两次赋值,那么它会把第一行的语句给过滤掉= =!

所以为避免这种情况的发生要用到volatile变量

volatile char *outPort;

4)枚举数据类型 OC编译器其实是把枚举变量当作整形来处理

enum flag {false,true};

要绳命一个枚举类型 仍需要用到enum关键字

enum flag endOfData;

endOfData=true;

if(endOfData==true)...

enum boolean{no=0,false=0,yes=1,true=1};

给enum boolean变量指配no和false时,就是向其赋值0,想yes true赋值1

enum direction{up,down,left= 10,right};

定义了包含up,down,left,right的枚举类型direction,

up,down会被默认赋值0,1,由于left显式地赋值为10,所以left=10,right递增赋值为11.

这里用一个小例子来巩固下枚举的学习:

enum month {january =1,february,march,april,may,june,july,august,september,october,november,december};
enum month amonth;
int days;

NSLog(@"Enter month number: ");
scanf("%i",&amonth);

switch (amonth){
case january:
case march:
case may:
case july:
case august:
case october:
case december:
days=31;
break;
case april:
case june:
case september:
case november:
days = 30;
break;
case february:
days = 28;
break;
default:
NSLog(@"bad month number");
days =0;
break;
}
if(days!=0){
NSLog(@"Number of days is %i",days);}
if(amonth == february)
{
NSLog(@"...or 29 if it 's a leap year");
}

结果:

再次运行

5)typedef 一种超能力!能为一个类型指派一个名称!nice啊~

typedef int Counter;

Counter j,n;//Counter类型就是int类型= =!

做个小例子~~~

typedef NSString *String;
String a ,b ,c;
a=@"nice!";
NSLog(@"String a is %@",a);

结果:

这真的太神奇了~声明其实相当于NSString *a,*b,*c;

例如:Foundation框架在它的一个头文件中使用typedef对NSComparisonResult进行了如下定义:

enum _NSComparisonReult

{

NSOrderedAscending = -1,NSOrderedSame,NSOrderedDescending

};

typedef NSInteger NSComparisonResult;// ~~~

-(NSComparisonResult) compare:(NSString *) string;//Foundation下的compare方法声明如下

If([userName compare:savedName]==NSOrdereSame)//实际上是检测返回的结果是否为0~~~

{

...

}

6)类型转换

ave = (float)total/n;//使用类型转换运算符显式地转换

7)符号扩展 这个概念还并不是很理解= =~

两种声明形式

unsigned char//不进行符号扩展

signed char//进行符号扩展

ObjC学习5-变量和数据类型相关推荐

  1. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

  2. 【Python基础入门系列】第03天:Python 变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可 ...

  3. pycharm 类型注释_学习Python第一步,变量与数据类型

    Python是一门易学的面向对象的程序设计语言,可以轻易地完成界面.文件.封装等高阶需求,可移植性好,有非常多功能强大的库与包,如Numpy(数值计算).SciPy(数学.科学与工程计算).Matpl ...

  4. 学习日报 day03 实体与标识符 变量与数据类型

    学习日报 day03 实体与标识符 变量与数据类型 https://cloud.189.cn/t/ryIZF3Rfqy2q 常见问题 导入外部java文件 如何把java源文件放入到myeclipse ...

  5. Spark基础学习笔记09:Scala变量与数据类型

    文章目录 零.本讲学习目标 一.变量声明 (一)简单说明 (二)利用val声明变量 1.声明方式 2.案例演示 (三)利用var声明变量 1.声明方式 2.案例演示 (四)换行输入语句(续行) (五) ...

  6. Scala学习笔记02:数据类型、常量与变量

    Scala学习笔记02:数据类型.常量与变量 一.数据类型 1.基本数据类型 Byte 字节型 Short 短整型 Int 整型 Long 长整型 Char 字符型 String 字符串 Float ...

  7. Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型、符号、运算符、数组Array总结之详细攻略

    Java编程语言学习:Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组Array总结之详细攻略 目录 Java语言编程的基础知识之Java的变量与数据类型.符号.运算符.数组总 ...

  8. VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略

    VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介.案例应用之详细攻略 目录 VB.net编程语言学习之操作符/变量/常量/ ...

  9. Web前端学习笔记11:JavaScript_注释_输入输出_变量_数据类型_关键字_保留字_运算符_流程控制

    文章目录 JavaScript基础第01天 1 - 编程语言 1.1 编程 1.2 计算机语言 1.3 编程语言 1.4 翻译器 1.5 编程语言和标记语言区别 总结 2 - 计算机基础 2.1 计算 ...

最新文章

  1. cpu负载过高案例,解决方法记录
  2. .NET 中上下文的概念
  3. linux 编译git 客户端源码然后安装
  4. 字符串分割 函数实现
  5. Audio Offload
  6. html---textarea初始化时就有个table空格以及tab键操作无效
  7. Java程序员最喜爱的编辑器之一(Sublime Text 3)
  8. Mac中找不到.bash_profile则自己创建.bash_profile文件
  9. vs中实现声音录制并保存到指定文件_别人直播怎么录制视频?这三种方法你可以不知道...
  10. blog微服务架构代码_Spring Cloud微服务架构代码结构详细讲解
  11. 索引sql server_SQL Server索引与统计顾问的困境或麻烦
  12. 【动态规划笔记】区间dp:括号匹配(删除字符和括号匹配)
  13. [Spring-cloud-eureka]使用 gradle, spring boot,Spring cloud Eureka 搭建服务注册中心
  14. 2. laravel 创建第一条路由
  15. 带你快速入门AXI4总线--AXI4-Full篇(2)----XILINX AXI4-Full接口IP源码仿真分析(Slave接口)
  16. ping服务器响应39ms,美国服务器的ping值多少网速才算快?
  17. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
  18. 锂电池供电电路设计方案汇总(四款设计方案)
  19. RNA 10. SCI 文章中基因表达富集之 KEGG 注释
  20. 昆明半程马拉松:1名选手死亡5名选手昏迷(图)

热门文章

  1. linux 所有邮件地址群发,linux sendmail群发邮件
  2. java怎么把弹框设置为圆角_自定义圆角Dialog
  3. 软件测试都需要哪些工具呢?一文带你看清
  4. java里frame颜色_如何为Java中的窗口(JFrame)添加颜色
  5. pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线
  6. fiddler APP抓包设置
  7. java高性能反射框架_终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南可太强了...
  8. 八年测开经验面试28K公司后,吐血整理出高频面试题和答案
  9. Ubuntu 搭建 NVIDIA驱动 CUDA 和 pytorch GPU 环境
  10. matlab mrst 工具箱 用共轭梯度法 找极值点