JS问题,给对象添加属性和给对象的原型添加属性有什么区别?

JS问题,给对象添加属性和给对象的原型添加属性有什么区别?,第1张

假设有对象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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11471391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存