iOS开发随笔
1、统一类前缀
类的前缀,可以这样加点击 target,在XCode最右侧的栏目里面会看到如下界面,在箭头处填写即可
2、storyboard设置view的宽高比
假如要设置View的宽高比为2:1
(1)先将view的frame调整为2:1,比如width=200,height=100;
(2)勾选Aspect Ratio
3、storyboard中控件的约束线也能拖拽成属性,方便代码修改!
4、类别(Category)和扩展(Extension)
类别是类方法的扩展,不能添加属性!但是可以通过runtime进行添加
扩展就是在类中声明属性@property
5、线程的死锁和互斥
死锁:线程相互等待 例如: 同步主线程刷新!
互斥:多线程并行修改同一个资源 例如:卖票等!
6、weak修饰属性时:当改属性的引用计数为0时,会将指针指向nil,底层实现就是hash表http://www.bijishequ.com/detail/314557?p=
7、ARC下OF(Core Foundation例如Core Graphics、Core Text)和OC对象的转换需要用到__bridge,__bridge_transfer,__bridge_retained
8、获取请求时间
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
NSLog(@"link in time %f",end - start)
9、Xcode 8.1或更高版本,在使用Editor中的Create NSManagedObject Subclass 这个命令的时候,需要先把这个model的Codegen设置为Manual/None,否则会报错,
10、修改文件为 可执行: chmod +x 文件 ,先cd 到上一级文件夹;
11、AFN默认对请求参数(NSMutableDictionary)内字段进行UTF-8编码,直接发送字符串不行!
12、iOS6.0之后废弃ViewDidUnload方法!
13、KVO的实现是isa混写(isa-swizzling),创建新类并重新set方法,将isa指针指向这个新类!
14、判断当前是iPhone几:
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
15、 正弦波
y=峰高* sin(x * M_PI / self.frame.size.width * 峰的数量 + 移动速度)
16、touchBegin失效
创建UIScrollView 或 UIImageView 时,当点击时UIScrollView 或 UIImageView 会截获touch事件,导致touchesBegan: withEvent:/touchesMoved: withEvent:/touchesEnded: withEvent: 等方法不执行。解决办法:当UIScrollView 或 UIImageView 截获touch事件后,让其传递下去即可(就是传递给其父视图UIView)
17、延迟函数的使用和取消(适用于多次点击同一个事件,弹框延迟消失)
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;//延迟函数 + (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;//取消延迟
18、bounds的影响(CAScrollLayer就是通过改变自己的原点位置,影响子view的显示)
(1)它可以修改自己坐标系的原点位置,影响“子view”的显示位置。
(2) bounds,它可以通过改变宽高,改变自身的frame,进而影响到再父视图的显示位置(平均扩充或缩减四周的区域)和大小。
19、开发者团队
- 苹果提供了Agent、Admin、Member、No Access四种团队身份,它们分别拥有不同的权限。
- Agent:代理人。这个账号就是创建团队的账号,它拥有最大权限,且不会允许其他Admin修改Agent权限。但是Agent账号可以将权限转移。
- Admin:管理员。它拥有几乎所有内容的管理权限
- Member:成员。有权访问、下载一些信息,但是不能进行修改、管理
- No Access:无权限。(因为后台有iOS、Mac、Safari三个模块,因此每个模块可以限定是否可以访问)
20、开发者账号
①费用:99 美元/年
②协作人数:仅限开发者自己
③不需要填写公司的邓百氏编码( D-U-N-S Number)
④支持账号下的 app 上线 App Store
⑤需要创建 Apple ID
2>.公司账号
① 费用:99 美元/年
② 允许多个开发者协作开发
③ 需要填写公司的邓百氏编码( D-U-N-S Number)
④ 该账号下的 app 可上线至 App Store
⑤ 需要创建 Apple ID
3>.企业账号
① 费用:299 美元/年
② 允许多个开发者协作开发
③ 需要填写公司的邓百氏编码( D-U-N-S Number)
④ 该账号下的 app 不能发布到 App Store 中
⑤ 需要创建 Apple ID
if (@available(iOS 8.2, *)) { //iOS 8.2版本之后 } else { }
24、精简代码,返回最后一句的值
self.backScrollView.frame = ({ CGRect frame = self.backScrollView.frame; frame.origin.y = self.view.frame.origin.y - 10; frame; });
25、子视图自适应父视图
@property(nonatomic) BOOL autoresizesSubviews; // default is YES. @property(nonatomic) UIViewAutoresizing autoresizingMask;
26、获取字符串中的数字
NSCharacterSet* nonDigits =[[NSCharacterSet decimalDigitCharacterSet] invertedSet]; int remainSecond =[[urlString stringByTrimmingCharactersInSet:nonDigits] intValue]; NSLog(@" num %d ",remainSecond);
27、Objective-C Literals 字面量创建
NSArray *array = @[@"One String", @"Two"];
28、创建Category分类
1、文件列表右键-->选择New File... 2、选择iOS-->Source -->Objective-C File 3、File:文件起名 File Type:文件类型Empty File(空文件)、Category(分类)、Protocol(协议)、Extension(扩展)
Class:类名
29、三目运算符
rootID ?rootID: @"" 和 rootID ?: @"" 效果等同
30、gem sources 淘宝不在维护
https://gems.ruby-china.org/
31、超出view部分拥有点击事件,重写view的hitTest withEvent事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if (view == nil) {
for (UIView *subView in self.subviews) {
CGPoint tp = [subView convertPoint:point fromView:self];
if (CGRectContainsPoint(subView.bounds, tp)) {
view = subView;
}
}
}
return view;
}