1,C语言中的static
1),修饰成员变量 2),修饰全部变量 3),修饰函数
2,OC中static
1),在OC中static 不能修饰属性 也不能修饰方法
2),static可以修饰方法中的局部变量 如果方法中的局部变量被static修饰 这个变量就变成静态变量 存储在常量区 当方法执行完毕的时候不会回收 下次再执行这个方法的时候 会忽略声明 直接使用
3),需要变量永远不消失 每次都能做处理 就使用static
3,如果方法的返回值是当前类的对象 那么返回值 写 instancetype
1,在方法的内部 可以定义一个和属性名相同的局部变量 这个时候 在方法中访问同名变量 例如_name 拿到的不是属性 而是新定义的局部变量
问题1:如果我就是要访问那个同名的属性怎么办? 问题2:在一个对象方法中要调用当前对象的另一个对象方法怎么办?
2,self:自己的 和java 中的 this 有一点点像
可以在对象方法和类方法中使用 self是一个指针 在对象方法中self指向当前对象 在类方法中self指向当前类。
3,self用在对象方法中的场景
1),self在对象方法中,指向当前对象 当前对象:谁调用方法,谁就是当前对象 const :只读
2),在对象方法中,self指向当前对象 作用一:使用self 显式访问 访问当前对象的属性 作用二:使用self 访问当前对象的其他对象方法
3),对象方法中必须使用self的场景 a,出现属性和局部变量同名 又需要访问当前对象同名属性 必须使用self b,如果要调用当前对象的其他对象方法 必须使用self
4),选用self的场景 在方法中不存在和属性同名的局部变量 这个时候 访问当前对象的属性 self可用可不用。
注意:一般情况下 不太可能重名 因为属性都加了下划线 就算是同名 也可以将局部变量换一个名字呀
4,在类方法中使用self
1),类加载,当类第一次被访问的时候,会将类的代码存储在代码段 代码段中涌来存储类的空间 也有一个地址
2),在类方法中,self也是一个指针 执行当前这个类在代码段当中的地址 self 就类方法中就是 相当于 当前这个类
3), 总结一下取到类在代码段中的地址的方式 a,调试查看该类对象的 isa 的值 b,在类方法中输出 self 的值 c,调用该类对象的 对象方法class 方法 可以返回这个地址 d,调用该类的 类方法class方法 也可以返回这个地址
4),可以在类方法中使用 self 调用本类其他的类方法 当然 也可以使用类名调用 但是这种情况下 建议使用 self。
5,对象方法可以声明多次,但是只会认为有一次 对象方法只能实现一次 否则就会出错 换言之 对象方法之间是不能重名的
类方法之间也是不可以重名的。
但是对象方法和类方法之间可以重名 通过类名调用 调用的就是类方法 通过实例对象调用 调用的就是对象方法
6,注意
1),在对象方法中self代表当前对象 所以可以通过 self 访问当前对象的成员 但是不可以 使用self 调用类方法
2),在类方法中 self 代表当前这个类 所以可以通过self 去调用这个类的类方法 但是不可以 使用self调用当前对象的成员
|