假设有对象objece;
var object = function(){this.a = 1
this.b = 2
}
然后我 var obj1 = new object()
这里的obj1就是对象,给对象obj1加一个属性 obj1.c = 3;
但是我再var obj2 = new object()这里的obj2并没有c这个属性
但是我通过原型的方式加属性c; object.prototype.c = 3;
那么我var obj3 = new object()
obj3就有c这个属性
望采纳!
@synthesize a编译器命令是ObjectiveC 2.0引进的新编译命令,称为自动补全属性。你要注意:
1. @property是在@interface内的,其只是一个声明,最多算是get/set方法的声明,没有实体
2. @sythesize是在@implement内的,其实现了对应@property声明的内容,包括成员变量,对应的访问器(get、set方法)。
@sythesize a = _a // 这个是ObjectiveC 2.0之前的写法,用这个方法必须在@implement内用大括号声明一个变量,例如:
@implement {
NSString *_a
}
@sythesize a = _a
@end
@sythesize a // 这个是ObjectiveC 2.0之后的写法,编译器将会自动生成所需要的成员变量。
@property声明属性,做了三件事
.h: 声明了getter和setter方法;
.h: 声明了实例变量(默认:下划线+属性名);
.m: 实现了getter和setter方法。
是否给setter和getter加锁,是否保证setter或者getter的每次访问是完整性的
atomic (默认值)
一定程度上可以保证线程安全,有线程在访问setter,其他线程只能等待完成后才能访问。
nonatomic
不保证你获得的是有效值
readwrite,就是告诉编译器,同时生成getter和setter。如果是readonly,只生成getter。
readwrite: 「读写」
readonly: 「只读」
strong (默认值)
表明你需要引用(持有)这个对象,负责保持这个对象的生命周期。
基本数据类型(非对象类型,如int, float, BOOL),默认值并不是strong,strong只能用于对象类型。
weak
跟strong相反,属性所指的对象销毁时,属性值也会清空,设置为nil。
会给你一个引用,指向对象。但是不会主张所有权。也不会增加retain count。
在delegate patterns中常用weak解决strong reference cycles(以前叫retain cycles)问题。
copy
会在赋值前,复制一个对象,指向新对象
NSString,NSArray,NSDictonary,推荐使用copy属性
NSMubtableString,NSMutableArray, NSMutableDictonary属性则使用strong属性。
assign
针对基本数据类型赋值 *** 作。
nullable :对象「可为空」
nonnull :对象「不可为空」
null_unspecified :「未指定」
null_resettable :调用setter去reset属性时,可以传入nil,但是getter返回值,不为空。
① 四种整型 :
short int : 短整型, 占16位, mac 上占 2 字节, ios 上占 2 字节, 范围 -32768(-2^15) ~ 32767(2^15 - 1), 3万
int : 整型, 占32位, mac 上占 4 字节, ios 上占 4 字节, 范围 -2147483648(-2^31) ~ 2147483647(2^31 - 1), 21亿
long int : 长整型, 占64位, mac 上占 8 字节, ios 上占 4 字节, (-2^63) ~ (2^63 - 1), 922亿亿
long long : 占64位, mac 上占 8 字节, ios 上占 8 字节
② 进制 :
八进制 十六进制赋值 : 八进制由 "0" 开头, 十六进制由 "0x" 或者 "0X" 开头
③ 无符号整型:
无符号整型 第一位 不是符号位, 范围比原来要大,例 unsigned short int 范围是 0到6万
-- %d : 十进制整数, 正数无符号, 负数有 "-" 符号
-- %o : 八进制无符号整数, 没有 0 前缀
-- %x : 十六进制无符号整数, 没有 0x 前缀
-- %u : 十进制无符号整数
单个字符表示 : 使用 '' 将单个字符引起来, 便是字符常量, 如 'a', 'b' 等
转义字符表示 : 使用转义符号 \ 来指定字符, 如 '\n' 等
字符占用空间大小 : 每个字符占用一个字节, 因此 Object-C 不支持中文字符, 因为中文字符都是占 2 ~ 3 个字节
-- %c : 单个字符输出
-- %s : 输出字符串
float : 占 4 字节
double : 占 8 字节
long double : 占 16 字节
CGFloat :对于需要兼容64位机器的程序而言,需要用CGFloat,当然从长远角度考虑还是推荐尽量使用CGFloat。尽管在32位上相比float增加了一些memory footprint的消耗
(Object-C浮点数 : 不区分 double 与 float, 一个浮点数 3.8 可以赋值给两种类型的变量)
-- %f : 以小数形式输出浮点数, 默认 6 位小数
-- %e : 以指数形式输出浮点数, 默认 6 位小数
-- %g : 自动选择 %e 或者 %f 各式
① 定义普通枚举:
定义方式 : 格式 enum enum_name {elem1, elem2, elem3 ...}
示例 : enum day{Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}
定义枚举变量 : 格式 enum enum_name var1, var2
示例 : enum day today, tomorrow, 注意 today tomorrow 两个变量的取值只能是 day 枚举中定义的值
枚举变量赋值 : 格式 variable = elm1
示例 : today = Sundaytomorrow = Friday
② 定义匿名枚举:
匿名枚举格式 : enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday} today, tomorrow
说明 : 两个枚举变量 today 和 tomorrow 只能取值 enum 中得枚举值
③ 枚举值简介
枚举值常量 : 在 {} 中得是枚举常量 或者 枚举元素, 该元素不是变量, 不能对齐进行赋值, 枚举的值按照定义的顺序 0, 1, 2, 3 以此类推
枚举值本质 : 枚举值属于无符号整数, 可以使用 %u 占位符打印出来, 其值也能进行大小比较, 和四则运算
枚举初值 : 枚举值可以在定义的时候赋予一个初值
-- %p : 输出十六进制形式的指针地址
-- %@ : 输出 Object-C 对象
BOOL 类型值 : 该类型至右两个值 YES 和 NO
BOOL 类型本质 : 该类型本质是 signed char, YES 是 1, NO 是 0, 在处理的时候 YES 会被当成真处理, NO 会被当成假处理
nil相当于Java中的null,表示一个对象,这个对象的指针指向空。Nil是定义一个指向空的类而不是对象。
可以存放任何数据类型的对象,类似Java中的Object类,其被定义为指向对象的指针(本身就是指针了),故定义比如id instance = nil
id类型是多态和动态绑定的基础。
Object C 数字、字符串、集合、字典、NSURL、NSDate
下一章: Object C 数字、字符串、集合、字典、NSURL、NSDate - (jianshu.com)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)