侠外游戏论坛

标题: [ios11描述文件]【ios11描述文件导出】 [打印本页]

作者: coconut    时间: 2021-1-4 05:46
标题: [ios11描述文件]【ios11描述文件导出】


国庆后lucio开始由Android开发转做iOS开发了,在这之前lucio可是什么苹果产品都没用过的小白,这里po一下小白的iOS开发学习历程,包括看的书、视频、文章,看看lucio如何从小白快速(并不快┓(´∀`)┏其实)入门iOS开发的。
《Objective-C基础教程》,很好。这里整理下后面几章的学习笔记,方便复习。
《Objective-C基础教程》第8章 Foundation Kit介绍
《Objective-C基础教程》第9章 内存管理
《Objective-C基础教程》第10章 对象初始化
《Objective-C基础教程》第11章 属性
《Objective-C基础教程》第12章 类别
《Objective-C基础教程》第13章 协议
《Objective-C基础教程》第14章 代码块和并发性
斯坦福大学公开课:iOS 8开发
这个公开课每个iOS版本都有,基本是用一个demo来讲解iOS开发,每个版本的demo都不一样,iOS7是用Objective-C的,我也是看完了才知道,但看iOS8的课程也是能同步用Objective-C完成demo的,两边的方法名称完全一样,只有语法的不同。
贴一下里面关于MVC模式的讲解
MVC模式
Model与View不能通信:Model与UI完全独立,UI组件都是generic的,需要Controller为其翻译并格式化Model的信息用于显示。Controller->View:View里的UI组件以outlet形式存在于Controller中。View->Controller:Controller自己注册target,告诉View当有指定的action(如按钮点击)发生时,发送这个action给我这个target。View通过delegate将should、will、did等动作的响应交给Controller处理。View不拥有其显示的数据,它是通过data source(也算一种特殊的delegate)从Controller那里拿数据,而数据来自Model。 Model->Controller:Model将自己的属性变化通过广播发送给感兴趣的订阅者(一般是Controller),Notification & KVO,然后Controller去Model中取新的数据。





看随书的源码可以快速了解各种控件的使用,以及图形、动画相关知识。
The official raywenderlich.com Objective-C style guide.
中文翻译:
需要多注意里面一些细节的东西:
copy和strong的选择:把一个对象赋值给一个属性变量,当这个对象变化了,如果希望属性变量变化就使用strong属性,如果希望属性变量不跟着变化,就是用copy属性。推荐使用代码提示中宏定义的NS_ENUM()枚举模块来创建,它可以提供更严谨的类型检测和代码补完功能。私有变更应该在类的私有类别中,不需要加private等词语来进行修饰。私有类别可以在命名为+Private.h的文件里提供。init方法中返回值使用instancetype取代id作为返回。[原因]单例必须线程安全。:]
总结一套自己的View代码规范,日后需要慢慢完善。
// 通用viewController/view代码结构
#pragma mark - LifeCycle Menthod
- (void)viewDidLoad {
     [super viewDidLoad];
     [self initView()];
     [self initData()];
}
- (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
}
- (void)didReceiveMemoryWarning {
     [super didReceiveMemoryWarning];
}
- (instancetype)init {}
- (void)dealloc {}
#pragma mark - Delegate Menthod
#pragma mark - Event response
- (void)xxxClick(){
}
#pragma mark - Public
#pragma mark - Private
- (void)initView{
     //DO initView
     [self initConstrains()];
}
- (void)initConstrains{
     //DO initConstrains
}
- (void)initData{
     //DO initData
}
#pragma mark - getter && setter
// 1. 属性(特别是View)的初始化放在getter,在initView里面只addSubview。
// 2. 关于第1点的lazy initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑。
// 3. initConstrains用于初始化约束,尽量使用makeConstraints,如果约束需要动态更新,重写updateViewConstraints或updateConstraints
关于注释第2点:
Good or bad practice? Initializing objects in getter
lazy initialization,对于需要判空的,线程不安全的以及自动优化相关的属性需要多加考虑,原因如上。
iOS项目工程及目录结构
区分不同层次的通用组件。
iOS 项目的目录结构能看出你的开发经验



两个例子可以大概参考下。

以上内容就是[ios11描述文件]【ios11描述文件导出】的相关内容介绍,喜欢侠外游戏论坛的朋友可以关注我们。
              12下一页
作者: coconut    时间: 2021-1-4 05:47
CocoaPods安装和使用教程
Carthage 包管理工具,另一种敏捷轻快的 iOS & MAC 开发体验
CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库。然后 CocoaPods 就会进行下载ios11描述文件,集成,然后修改或者创建我们项目的 workspace 文件,这一系列整体操作。
相比之下,Carthage 就要轻量很多,它也会一个叫做 Cartfile 描述文件,但 Carthage 不会对我们的项目结构进行任何修改,更不多创建 workspace。它只是根据我们描述文件中配置的第三方库,将他们下载到本地,然后使用 xcodebuild 构建成 framework 文件。然后由我们自己将这些库集成到项目中。Carthage 使用的是一种非侵入性的哲学。
Masonry
Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X Masonry介绍与使用实践
AFNetworking
AFNetWorking一款轻量级网络请求开源框架,基于iOS和mac os 网络进行扩展的高性能框架 IOS 网络请求之 AFNetWorking 3.x 使用
FMDB
FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API [iOS]数据库第三方框架FMDB详细讲解  FMDB 使用方法
libextobjc
libextobjc一个提供语言级别各种小功能的库
FLEX 应用内调试神器



SDWebImage 图片加载框架
Reachability 检测手机网络状态
MJRefresh 下拉刷新,上拉加载更多组件
Toast Toast
MBProgressHUD 半透明提示框
DateTools 用于提高Objective-C中日期和时间相关操作的效率 DateTools使用「日期工具库」
更多:
iOS 第三方库、插件、知名博客总结
UIScrollview与Autolayout
scrollView比较特殊,因为它有个contentSize的属性。ScrollView的contentSize的大小是由其subview的constraints来决定的。
为了正常显示,使用一个单一的containerView占满全部,然后把所有的subview添加到containerView中。(亲测)
Where should I be setting autolayout constraints when creating views programmatically?
How to Use updateConstraints?
updateViewConstraints与updateConstraints可以在需要更新大量约束时重写,对于只初始化一次而不需要修改的约束,写到类似于viewDidLoad的方法中比较好。



The Mystery of the +requiresConstraintBasedLayout
基于约束的布局是懒触发的,只有在添加了约束的情况下,系统才会自动调用 -updateConstraints 方法,如果把所有的约束放在 updateConstraints中ios11描述文件,那么系统将会不知道你的布局方式是基于约束的,所以重写+requiresConstraintBasedLayout 返回YES就是明确告诉系统:虽然我之前没有添加约束,但我确实是基于约束的布局!这样可以保证系统一定会调用 -updateConstraints 方法 从而正确添加约束。
透彻理解block中weakSelf和strongSelf
__weak __typeof(self)weakSelf = self;
[self.context performBlock:^{
    __strong __typeof(weakSelf)strongSelf = weakSelf;
    [strongSelf doSomething];
}];
当block直接或间接的被self持有时,需要weakSelf。其他情况下加weakSelf也没什么问题。
使用libextobjc库可以简化下代码:
#import "EXTScope.h"
@weakify(self)
[self.context performBlock:^{
    @strongify(self)
    [self doSomething];
}];
iOS本地数据存取,看这里就够了
XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3Core Data
// TODO: 2017/10/23 继续完善本文直到结束入门
When they are needed, comments should be used to explain why a particular piece of code does something. Any comments that are used must be kept up-to-date or deleted.
——The official raywenderlich.com Objective-C style guide.
JAVA设计模式之单例模式
使用dispatch_once创建单例
ViewController的几个属性:edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets、extendedLayoutIncludesOpaqueBars
如何做好IOS View的布局
布局原则:
《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法》阅读笔记

以上内容就是[ios11描述文件]【ios11描述文件导出】的相关内容介绍,喜欢侠外游戏论坛的朋友可以关注我们。
              上一页12




欢迎光临 侠外游戏论坛 (https://bbs.xiawai.com/) Powered by Discuz! X3