OC基础之访问修饰符
做C#、Java的人都知道private、protect、public这些访问权限,在OC中看项目基本都没用到这些,昨天就好奇的仔细了解了下,其实OC中也是有这些访问权限的修饰。说实话有好多做过编程的也未必对这些基础知识了解。
1.分清属性和变量的区别
属性是对变量的封装,可以通过属性(get\set)方法来访问变量。例如有一些变量(例如年龄、性别等)在赋值或取值要满足一些条件,那如何解决呢? 于是属性就应运而生,用它的get、set方法来解决这个问题 ,这也是面向对象中封装的体现。
2.private、protect、public访问权限修饰符
这些修饰符可以对变量、属性、方法进行修饰。为什么会出现这些修饰符呢?比如一些信息是隐私的不希望被外部访问或者访问也只能它家族里可以访问,所以权限修饰符应运而生。
3.OC中的private、protect、public访问权限修饰符
看别人的项目包括自己的项目都没有对属性、方法、变量的修饰符。其实oc中也是有这些的,只是不常用或者根本甚至根本没用过。
属性访问权限
protected 该类和所有的子类中的方法可以直接访问这样的变量,这是默认的。
private 该类中的方法可以访问这样的变量,子类不可以 可以将变量放在.m中
public 除了自己和子类中的方法外,也可以被其他类或者其他模块中的方法所访问。开放性最大。
package 框架集中
方法访问权限
只有public、private public .h文件 private .m中
4.代码demo
下面定义了一个父类Student,子类OldStudent继承父类Student。
#import Foundation/Foundation.h @interface Student : NSObject int age; //年龄 默认protect @public int no; // 学号 @protected float height; // 身高 @private float weight; // 体重
在上面OldStudent中并不能直接访问Student中的Weight。
#import Foundation/Foundation.h #import "Student.h" #import "OldStudent.h" int main(int argc, const char * argv[]) { @autoreleasepool { Student *student=[[Student alloc]init]; //访问变量 student- no=150001; //访问属性 student.Age=23; student.Height=170.0; student.Weight=170.0; [student eat];
oldStudent- no=15002; // oldStudent- age=24; //protect 子类不能继承 只能通过父类get/set方法 oldStudent.Age=24; oldStudent.Weight=200.0; oldStudent.Major=@"软件"; //默认是protect
}上面的代码中看到可以通过类似C++中- 来访问变量。OldStudent不能直接访问age变量,可以通过属性来访问。
这篇主要理解继承封装,对于多态,oc中的多态和C#的还不太一样,oc是没有编译时多态,是通过消息转发来完成,之前博客也有写。
OC泛型的使用 在声明类的时候,不确定某种属性或方法类型,在使用这个类的时候才确定,就可以采用泛型 如果没有自定义泛型,默认就是id类型
OC:在分类中添加成员变量,原来帮我们做了那么多事 本篇文章告诉你,如果在类对象和Category对象中添加一个属性时,底层做了什么。关联对象如何给Category对象添加成员变量,关联对象的实现原理。
社会主义 从.Net到iOS,在撸的道路上越走越远,工作之余经营着博客园http://www.cnblogs.com/5ishare,欢迎小伙伴(妹子更好)一起交流,谈谈人生理想。作为经常从网上索取免费资料的一员,要有回报回报的思想,也让更多的人少走弯路.
相关文章
- Python基础15-日志模块logging
- Java基础之——Lambda表达式
- wpf-AvalonDock基础-安装和更换主题
- Java基础入门笔记01——JAVASE,EE,ME 常用Dos命令,JVM,JRE,JDK「建议收藏」
- 大数据必学Java基础(七十七):线程的生命周期和常见方法
- Linux网络-套接字编程基础
- (四)算法基础——二分算法
- 以数据为中心的数据安全基础能力建设探索
- 深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
- 【Linux】基础IO --- 系统级文件接口、文件描述符表、文件控制块、fd分配规则、重定向…
- 老生常谈MongoDB数据库基础操作
- Oracle数据库入门基础语句学习(oracle入门语句)
- 《Linux基础入门视频新手必学-10GB》
- 「macOS安装器」教程: 零基础也能轻松完成!(macos安装器)
- MySQL数据库基础语句掌握之道(mysql数据库基本语句)
- MySQL 基础掌握 PIN 码的生成和使用技巧(mysql_pin)
- linq语法基础使用示例