To get started, learn more about the knowledge tree of iOS development. What big branches and leaves on the tree, the best number in mind. Usually read more books, and discuss technology with seniors, get a lot of experience. Choose the right position, and then gradually break through the point of ignorance, and then start to study some in-depth areas, 10,000 hours theorem you know.

First of all, I recommend some advanced books (sorry, I don’t read much). :

1. Objective-c Basics tutorial

2. The Tao of Objective-C Programming: Breaking Down iOS Design Patterns

3. Objective-c Advanced Programming (multithreading and Memory Management for iOS and OSX)

4. Effectiveobjective-c [Effective Series by China Machine Press]

5. The Secret of iPhone Development by Erica Sadun

[Note: All the above four books are from the Turing Series of Posts and Telecommunications Press, except Effective’s.]

And then, LET me outline some of the technical divisions.

Primary stage:

In terms of Objective-C:

1. Basic knowledge of Foundation framework, Catagory, KVC, KVO, Protocol, Block, reference counting, etc.

2. Pay attention to code specifications.

General controls for iOS development:

1.UIView related controls (UILabel, UIImageView, UIButton, UISlider, UISwitch, UIScrollView (TableView, CollectionView, TextView), UIWebView, UIWindow, UINavigationBar, UITabBar).

2. Understand the life cycle of UIViewController, Navigation stack principle, etc.

3. Never code UI or use Storyboard only. It’s important to understand Xib, Storyborad, and AutoLayout.

4.NSNotifaication, observer and agent are all necessary means of global code events, which can be further decoupled by using them skillfully.

5. Gestures. UITapGestureRecognizer, UIPanGestureRecognizer, UILongPressGestureRecognizer, UISwipeGestureRecognizer, UIRotationGestureRec Ognizer.

6. The rotation of the screen, not to repeat, this pit to walk more good.

7. The original navigation map related development, bucai recommended himself an article here: http://www.jianshu.com/p/72652a93741d

File management, Bundle, NSFileManager.

9. Data store: UserDefault, KeyChain, and NSKeyedArchiver.

People who have worked for a year are most likely to memorize the direction of the interview and try to figure it out again and again.

IOS animation:

UIView animation package, UIAnimation, if you have time, you can look at Lottie, it supports a lot of cool animation effects. But only if you have an AE designer.

2.Controller related TransitionStyle

3.CAlayer, the user interface (UI), the user interface (UI), the user interface (UI), the user interface (UI), the user interface (UI), and the user interface (UI).

Design pattern:

This part of the content research, it is suggested to take some open source enterprise framework for learning. I was which BeeFramework, Bee framework is a very good MVC model learning framework. The View construction of XML UI + Signal is also excellent. Unfortunately, Bee is no longer maintained, so learn from it. (Also note: many companies also implement MVVM mode on behalf of ReactiveCocoa, which is recommended for job-hunting guys.)

Common design patterns to know:

1.MVC

2. Proxy mode

3. The singleton

4. The observer

5. Factory mode

Unit tests:

1. Unit testing fundamentals

2.XCTest

3.Kiwi (there should be a tap on the blackboard here, Kiwi is BDD (Behavior Driven Testing) testing solution.)

In addition to the development technology:

1. Project version management: SVN, Git (GUI of Git, Tower recommended on Mac)

2. Project package dependency management: CocoaPods (OC), SwiftPackage Manager(Swift)

3. Debug various tips. Breakpoints (conditional, global), LLDB debugging basic instructions, NSZombieEnabled,

4. Understanding of basic concepts such as process, thread, synchronous, asynchronous, queue, serial and concurrent.

Intermediate stage.

At this stage, we should focus more on performance and business optimization.

Development language:

1.Swift: Objective-C and Swift intertune.

2.JavaScript: Execute JavaScript using Objective-C. Learn more about JavaScriptCore. The three-party framework recommends WebViewjavaScriptBridge.

3.C, C++, Objective-C mixed programming.

IOS:

1. Familiar with CAAnimation (CABasicAnimation, CAKeyFrameAnimation, CAAnimationgroup\CATransition), UIDynamics (UIDynamicAnimator, UIDy) NamicBehavior)

2.Runtime: objc_msgSend, Method Swizzling;

3. Regular expressions: NS redicate, NSRegularExpression.

4. Message push mechanism

5. Component development: Create Framework and package static library

6. Distinguish between 32-bit and 64-bit compilation, and be able to migrate 32-bit applications to 64-bit (this part,,,, is not required).

Multimedia:

VLC components are frequently used, but some of the unneeded decoding libraries can be properly stripped and divided to reduce the library size. SDWebImage can carefully study its loading strategy and cache strategy. CoreAudio and COreGraphics can schedule hardware for encoding and decoding, improving efficiency that Android will not achieve for a while.

1. Video: MediaPlayer, AVPlayer, VLCPlayer, AVFoundation

2. Images: CoreGraphics, SDWebImage, CoreImage

3. Audio: CoreAudio

4. An important image processing framework outside the app: GPUImage. If you want to join a company that is currently very popular in photography and short video development, you are advised to study this open source library. Here recommend Git repository: https://github.com/filelife

Network Interaction:

I definitely recommend studying AFNetworking (2.0 and 3.0). You can use it first and then learn how to encapsulate abstractions.

1.NSStream

2.NSURLconnection

3.NSURLSession

4.Json parsing (Model data receiving crashes, mostly in Json parsing.)

Application test:

Still for the application inexplicable jam and distress, but also to find the project optimization point was the same batch of products? Instrument – You are worth it.

1. Performance test: Instrument (Timer, Allocation, Leak)

Fabric: a platform for collecting statistics on crashes and user operations of online applications. Generally, you a person development, do not use this, you pretty look at it.

Development environment and engineering framework (in my opinion, I pay more attention to them in the middle and later stage)

Engineering framework

1. Package dependency management: Cocoapods, SwiftPackageManager, and Carthage. If you are manually downloading from Git in order to add a dependency library, you should be careful to use these package management tools. The efficiency is greatly improved, and it is convenient for the team to quickly build the project framework when developing. (Note: If you are starting with ObjectiveC, it is recommended that you try to create your first remote Cocoapods repository with a Podspec.)

Continuous integration: Jenkins. First, you discover your need for continuous integration during development and find it really tiring… It’s time to really think about how you’re going to do this fidgety job with tools.

3. Data security:

3.1 Data Encryption: Hash (MD5, SHA1, SHA265), RSA, AES, 3DES, Base63.

3.2HTTPS and SSL: When developing, you must learn to skip HTTPS authorization, and iOS is no exception.

4. Packaging Tools: Jenkins, Command Line Tools, Xctool

5. User behavior monitoring, crash log Mobile: Fabric, Umeng

The development environment

Git: SourceTree, Tower (highly recommended Tower, much faster than ST)

SVN: Versions and Cornerstone. (True Versions are better than Cornerstone.)

3. Developer account application and management:

3.1Apple Developer MemberCenter: Certificate (release certificate, development certificate, push certificate), device management, configuration file management (you can buy a Developer account with 99 dollars)

3.2iTurnes Connect: Appstore application management, app launch review and testing, urgent review.

5. Hot technologies:

5.1 Payment: wechat Pay, Alipay Pay

5.2 Sharing: Weibo, wechat moments, etc

5.3 Instant messaging: XMPP and VoIP.

5.4 Mixed application development: ReactNative, which is recommended after OC learning. Some companies have requirements.

Most of the content listed above comes from daily development, and some of the content comes from reading books. Some of the content comes from some technical points discussed by pingshi and his predecessors in xia discussion (CHE). I will put them into notes with hamster mentality, and then arrange them into knowledge points and learn them one by one in my spare time.

I believe in the principle of ten thousand hours, more than half of the code will not be wrong, but learning at the same time also adjust the direction.