@fiy-fish
2016-07-12T21:16:39.000000Z
字数 3577
阅读 1613
读书笔记
- 消息结构: 代码执行由环境决定
- 方法调用: 由编译器决定
- 虚方法表 (virtual table)
@class 向前申明 来替换 #import
- @class 告诉编译器有某个类不需要知道这个类的所有细节(还可以解决两个类互相引用的问题) 降低类之间的耦合 coupling
- #import 会编译所有的细节 增加了编译时间
如果有时候,没法子使用@class 必须用#import时:比如,要遵守某个类的协议
NSNumber *intNumber = @1;
NSNumber *floatNumber = @3.14f;
NSNumber *doubleNumber = @5.234324;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @'a';
int x = 3;
float y = 5.33f;
NSNumber *expressNumber = @(x * y);
NSArray *animalArr= @[@"cat",@"dog",@"mous",@"badger"];
/*
例如:NSArray *A= @[@"cat",@"dog",nil,@"badger"];
但是:NSArray *B = [NSArray arrayWithObjects:@"cat",@"dog",nil,@"badger", nil];
A:数组中有nil 会出现异常
B:中的元素为 @"cat",@"dog", 而不会报错,但是数组的元素偷偷减少了
字面量语法可以帮助我们避免这种错误,
*/
NSDictionary *personData = @{@"firstNmae":@"王",@"lastName":@"二小",@"age":@"18"};
static const NSTimeInterval *kAnimationDuration = 0.3
1.可以明确看出常量类型
2.一般 类型常量声明在 .m实现文件中,static 表示只在此编译文件也就是.m文件中可以使用这个常量,这个时候,常量命名必须以前缀k开头
- 如果声明在.h头文件中,常量命名一般以类名为前缀
外部可见常量声明
在头文件 .h 中
extern NSString *const PersonStringName;
在实现文件 .m中NSSting *const PersonStringName = @"super man";
这种常量存在 全局符号表中 global symbol table
static const
定义,命名前加上k' 不会出现在全局符号表中extern
定义一个全局常量,在.m中实现 存在全局符号表中,命名一般以类名为前缀1.应该用枚举来表示状态机,传递给方法的选项以及状态码等值,给这些值起个易懂的名字
2.如果把传递给某个方法的选项表示为枚举类型,而多个选项又可同时使用,那么就将各选项值定义为2的幂,以便通过按位或操作将其组合起来
3.用NS_ENUM与NS_OPTIONS宏来定义枚举类型,并指明其底层数据类型,这样做可以确保枚举是用开发者所选的底层数据类型实现出来的,而不会采用编译器所选的类型
4.在处理枚举类型的switch语句中不要实现default分支。这样的话,加入新枚举之后,编译器就会提示开发者:siwtch语句并未处理所有枚举
在里面填写下面的代码
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
搞定
横屏 :左边聊天,右边地图
有个闪退问题,困扰了我两天了,才发现,轮播图的图片过大,一张有10多M,所以轮播图一开始动,就闪退,真是日了狗
+ (void)downloadFileWithUrl:(NSURL *)url
fileName:(NSString *)fileName
completeHandle:(void (^)(BOOL, NSURL *))complete {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:url] progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSString *document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
NSData *data = [NSData dataWithContentsOfURL:targetPath];
NSURL *fileUrl = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@/%@", document, fileName]];
BOOL success = [data writeToURL:fileUrl atomically:YES];
if (success) return fileUrl;
return nil;
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
if (error) {
complete(NO, nil);
}
if (filePath == nil) {
complete(NO, nil);
}
complete(YES, filePath);
}];
[downloadTask resume];
}