iOS学习杂记
在iOS路上不断学习,修修补补的自己的知识,随手记录一下
OC 点语法的本质
- 点语法本质依然是方法调用,即消息发送的方式
- 当使用点语法时,编译器其实会转换成,消息发送的方式
- OC的点语法不过是一种语法糖,其本质没变
/*
Student 类声明了一个name属性和一个对象方法study
*/
Student * student = [[Student alloc] init];
student.name = @"Jack"; // 这句相当于[student setName:@"Jack"];
NSString * studentName = student.name; // 这句相当于 NSString * studentName = [student name];
student.study; // 相当于 [student study];
// 这是一个错误写法,会产生死循环
- (void)setName:(NSString *)name {
self.name = name; // 相当于[self setName:name];
// 所以就会一直递归调用setName:方法,导致死循环了
}
// 这也是一个错误写法,原因也是一样,会一直递归调用name方法,导致死循环
- (NSString *)name {
return self.name; // 相当于return [self name];
}
注意,如果是struct,那么点语法就是对成员变量的直接访问,编译器并不会转换成方法调用 struct访问成员变量的点语法,是C语言的点语法,和OC的点语法有所区别
NSLog打印对象的本质——description方法
// 假设有个student对象(继承于NSObject)
NSLog(@"%@",student); // 相当于NSLog(@"%@",[student description])
所以,我们可以通过重写-description方法来实现自定义打印内容,而且除了对象方法,还有类方法+description
// 假设有个Student 类
NSLog(@"%@",[Student description]);
// 输出结果:Student
// 类方法的输出是类名
通过重写-description,+description可以自定义输出内容
// 在description里使用NSLog打印,可能会产生死循环
- (NSString *)description {
NSLog(@"%@",self);
return [super description];
}
// 不过在Xcode9.3上测试的结果,description里的NSLog只会执行三次
/* 输出结果(Xcode9.3)
description -- <Student: 0x60800000f240>
description -- <Student: 0x60800000f240>
description -- <Student: 0x60800000f240>
main -- <Student: 0x60800000f240>
*/
info.plist
$(PRODUCT_NAME)就是项目名称
Bundle name显示的APP名
Bundle name=$(PRODUCT_NAME)