OC-变量和数据类型
对象的初始化
Fraction *myFract=[[Fraction alloc] init];//初始化对象
[myFract setTo:1 over:3];//设置初始值
初始化对象和设置初始值的过程通常可以合并到一个方法中。
myArray=[[NSArray alloc] initWithArray:myOtherArray];
常见的编程习惯类中的所有初始化方法都以init开头。
编写初始化方法的策略:
通过复写init方法达成目的;必须将父类init方法的执行结果赋值给self(因为初始化过程改变了对象在内存中的位置--意味着引用将要改变);如果有多个初始化方法,应把参数最多的初始化方法作为指定的初始化方法,其他的初始化方法调用指定的初始化方法,这样可以把大部分初始化代码集中到单个方法中。
-(Fraction *)initWith:(int)n over:(int)d
{
self=[super init];
if (self) {
[self setTo:n over:d];
}
return self;
}
初始化方法示例
为了符合初始化规则,应该重写Fraction类的init方法,这一点尤其在作为子类时特别重要;所有的初始化方法都应返回id类型,这是编写可能会被继承的类初始化方法的一般规则,因为子类的对象并不等同于父类。
作用域
@protected 可被该类及任何子类中定义的方法直接访问--接口部分定义的实例变量默认是这种作用域
@private 可被定义在该类的方法直接访问,当时不能被子类中定义的方法直接访问--实现部分定义的实例变量默认是这种作用域
@pubilc 可被该类中定义的方法访问,也可被其他类或模块中定义的方法直接访问
@package 对于64位映像,可以在实现该类的映像中的任何地方访问这个实例变量
全局变量
在程序的开始处(所有的方法、类定义和函数定义之外)编写int gMoveNumber=0,那么gMoveNumber即为全局变量,而且是外部全局变量。
惯例,g作为全局变量的首字母
需要访问别的文件中定义的全局变量,只需在声明前加上关键字extern。
#import <Foundation/Foundation.h>
#import "Foo.h" int gGlobalVar=;
int main(int argc, const char * argv[]) {
@autoreleasepool {
Foo *myFoo=[[Foo alloc] init];
NSLog(@"%i",gGlobalVar); [myFoo setgGlobalVar:];
NSLog(@"%i",gGlobalVar);
}
return ;
}
main方法
-(void) setgGlobalVar:(int) val
{
extern int gGlobalVar;
gGlobalVar=val;
}
Foo类的setgGlobalVar方法
结果:5
10
静态变量
希望定义的全局变量只在特定的模块(文件)中是全局的,除了特定类中的方法之外没有其他方法需要访问这个特定变量。则该变量需要定义为静态变量。静态变量定义如下:static int gGlobalVar=0
枚举数据类型
enum flag{false,true};
enum direction{up,down,left=,right};
enum {east,west,south,north} direction;
枚举定义
数据类型转换
如果其中一个操作数是long double,另一个操作数被转换为long double型,计算结果也是这种类型
如果其中一个操作数是double,另一个操作数被转换为double型,计算结果也是这种类型
如果其中一个操作数是float,另一个操作数被转换为float型,计算结果也是这种类型
如果其中一个操作数是Bool、char、short int、bit field或者枚举数据类型,全部转换为int型
如果其中一个操作数是long long int,另一个操作数被转换为long long int型,计算结果也是这种类型
如果其中一个操作数是long int,另一个操作数被转换为long int型,计算结果也是这种类型
到这一步,两个都是int,计算结果也为int
但是涉及到unsigned操作数时,转换规则更为复杂
位运算符(暂缓)
最新文章
- Linux 服务器 安装 memcached
- 关于strcpy_s
- Pojo类(plain ordinary java object)
- [转]揭秘webdriver实现原理
- zw版【转发&#183;台湾nvp系列Delphi例程】HALCON SelectObj
- tornado异步请求的理解(转)
- Python-zip压缩-解压
- [jbdj]SpringMVC框架(3)映射器
- 树&#183;AVL树/平衡二叉树
- VirtualBox安装64位系统
- nginx 、springMvc(非分布式)相应的限流、消峰
- node+react 打包成功,控制台报错
- Linux下修改tomcat内存
- 精品绿色便携软件 &; 录制操作工具
- 面向对象(基础oop)之垃圾回收与静态成员
- Hadoop HBase概念学习系列之HBase里的4维坐标系统(第一步定位行键 ->; 第二步定位列簇 ->; 第三步定位列修饰符 ->; 第四步定位时间戳)(十八)
- MySQL----MySQL数据库入门----第一章 数据库入门
- Android反编译方法(class+xml)
- Linux下解压tar.xz文件
- 手把手教你用Vue2+webpack+node开发一个H5 app