day05 _未完待续
来源:互联网 发布:飞升符箓升级数据 编辑:程序博客网 时间:2024/05/29 16:45
@proerty 和 @synthesize
@proerty:编译器指令,当我们在类的声明中使用 @property,它会自动生成标准的setter和getter方法的声明
@synthesize:
1、用类的实现中,可以生成setter和getter方法的实现
2、生成一个私有成员变量,这个私有的成员变量与@synthesize后面的名字一样
我们可以指定 @synthesize 生成setter 和getter放的时候使用哪个成员变量,这个时候它就不会生成与@synthesize 后面的名字同名的私有成员变量了
@synthesize age = _age;
当然还可以使用增强的#proerty和@synthesize,参考
Objective-C中的@property和@synthesize用法
http://blog.csdn.net/zhiganglet/article/details/7546333
需要注意的是
在使用@property增强的时候如何自定义setter方法
1、如果你实现自定义的setter方法,@property就不会帮你生成它的setter方法,但仍然会帮你生成getter方法和私有的成员变量
2、如果你实现自定义的getter方法,@property就不会帮你生成它的getter方法,但仍然会帮你生成setter方法和私有的成员变量
3、如果你同时实现自定义的setter 和 getter方法,@property就不会帮你生成它的setter 和 getter方法,同时也不会帮你生成私有成员变量了
id 类型 (类似C++11 的auto)
id 类型是一个万能对象指针类型,它可以指向任意类对象
id 类型本身就是一个指针类型,接收对象时候不要再加 * 了;
id:缺点:
所有它任意对象上的方法它都可以调用,但如果这个对象上不存在这个方法,那再运行时就报错
它不会进行编译时的检查
当是用id类的变量去调用一个方法的时候,它会提示很多类似方法,不容易找到自己对象上的方法
优点:在只有是同时实现了某些方法的对象上产生多态特性
id 也叫 类型动态类
静态类型: 特定类的类型
1、提供编译时,如果对象上没有这个方法就再编译的时候报错
2、写代码的时候它的提示比较准确
在一般情况我们使用的都是静态类型
例子:
#import "CZPerson.h"
#import "CZDog.h"
int main(int argc, const char * argv[]) {
CZPerson *person = [CZPerson new];
person.age = 10;
NSLog(@"%d",person.age);
// [person setName:@""];
id pi = person;
[pi setAge:20];
NSLog(@"%d",[pi age]);
// id类型不可以使用点语法,也不可以使用 ->
// pi.age = 40;
// [pi setName:@"haha"];
pi = [CZDog new];
[pi setAge:4];
NSLog(@"%d",[pi age]);
return 0;
}
私有方法 其实就C++的类的私有方法(也叫私有函数,只不过oc中这种方法不写在声明中,外部看不到而已)
//私有方法:不能在外界调用的方法,只有实现没有声明的方法
//OC只有在实现文件中的定义的这个方法是私有,但是不是绝对的私有;
//私有方法:就是不让外界调用方法
//如果在一个类的方法可以写成私有的就不要写成公开的
重写init方法
重写init必须要做三件事
1、必须要调用父类init
2、必须检验父类的init是否成功初始化
3、返回自己指针
//有时候需要在初始化的时候从外界传入一些值
//OC init family
//自定义自己的初始化方法
//1、必须以initWith开头
//2、返回值类型必须是id 或 instancetype
//不是init 家族的方法,就不可以给self赋值
参考文章:iOS开发系列--Objective-C之类和对象
- day05 _未完待续
- C#软件解决方案_关键词(未完待续)
- 机器学习总结9_未完待续
- 未完待续
- 未完待续
- 未完待续
- 未完,待续
- 未完待续~~~~~~~~~~~~~~~~
- 未完待续
- 未完待续
- 未完待续
- 未完待续
- 未完待续
- SQL注入攻击与防御(第2版)_读书笔记2_未完待续
- [设计模式]_[初级]_[关于设计的目的][未完待续]
- 未完,待续……
- dojo入门(未完待续)
- mysql优化(未完....待续....)
- CentOS下UTF8和GBK的互转
- 36个Android开发常用代码片段
- .sql文件中的注释
- cookie的操作
- 判断目标是否在角色正前方一个扇形区域内,一般战斗系统中用作伤害处理
- day05 _未完待续
- count++不是原子性操作测试
- 五分钟初识Hadoop
- 1020. Tree Traversals (25)
- java.lang.IllegalArgumentException: Document base D:\apache-tomcat-6.0.20\webapps\XXX错误
- Java动态代理的实现机制
- left join on and 与 left join on where的区别
- bug记录:Json Parsing Error : JSON.parse: bad control character in string literal
- 【java基础】Minor GC、Major GC和Full GC之间的区别