iOS开发-一些小的知识点(长期更新)

2018-08-27  本文已影响0人  来者可追文过饰非

一、编译报错
1.Cannot find interface declaration for 'xxxxxxx'
-> 子类与父类交叉引用导致

二、小知识
1.#if与#ifdef的区别:
"#if 会判断后面的内容是否为true,则编译#if下面的代码"
"#ifdef 不管后边的内容是否为true,只会判断有没有定义这个宏,有的会就会编译#ifedf的代码"
2.NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END:
在这两个宏之间的代码,所有简单指针对象都被假定为nonnull,因此我们只需要去指定那些nullable的指针
3.在.h使用类似

extern NSString *const XLControllerDidAddToSuperViewNotification;

可以将字符串暴露出来,在.m文件中可以对它进行赋值

NSString *const XLControllerDidAddToSuperViewNotification = @"XLControllerDidAddToSuperViewNotification";

4.__kindof用法
这种情况下,我们就可以使用泛型和__kindof来解决这个问题。
使用泛型,我们可以这样声明这个数组:

@property (nonatomic, strong) NSArray<UIView *> *viewCollection;

这样我们知道这个数组被指定了元素为UIView类型。
但是呢,这样声明的数组它只能包含UIView类型的元素,如果元素被赋值为UIWebView或UIButton这样的子类型,编译器就会报警告⚠️。

为了解决这个问题,__kindof就应运而生。

@property (nonatomic, strong) NSArray<__kindof UIView *> *viewCollection;

用这种结构声明,这个数组就可以包含UIView以及UIView的子类型,例如UIWebView或UIButton。

5.取消延迟执行函数 cancelPreviousPerformRequestsWithTarget

// 延迟执行函数
[self performSelector:@selector(scrollDone) withObject:nil afterDelay:0.5];

// 在0.5秒内取消执行函数,带的参数必须一样,才能取消成功
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(scrollDone) object:nil];

6.命令行查看provision profile文件信息

/usr/bin/security cms -D -i 文件路径

7.button调整文字图片位置

moreB.titleEdgeInsets = UIEdgeInsetsMake(0, -moreB.imageView.frame.size.width - moreB.frame.size.width + moreB.titleLabel.frame.size.width, 0, 0);
moreB.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -moreB.titleLabel.frame.size.width - moreB.frame.size.width + moreB.imageView.frame.size.width);

三、其它问题
1.导入p12文件时,弹框提示'发生错误 无法导入项目'
-> 在确保密码无误的前提下,在Xcode->Preferences->accounts中登录p12文件所对应的账号密码,然后重新导入即可解决

2.上传ipa之后收到苹果邮件:Invalid Swift Support - The SwiftSupport folder is empty. Rebuild your app using the current public (GM) version of Xcode and resubmit it.
-> https://www.jianshu.com/p/539691a17a9e

3.cell点击后present页面延迟问题
-> https://www.jianshu.com/p/50072938da4f

4.实现导航栏从无到有的平稳过渡效果
-> https://www.jianshu.com/p/6e723ad77141

上一篇下一篇

猜你喜欢

热点阅读