Designing the foundations of an iOS application is important to reduce the cost of maintenance and evolution. In this session we will see some best practices on how to organize iOS apps both from the point of view of the Xcode project and the source code. Based on the typical iOS client/server application, we will see how to structure the layers ranging from the user interface to the netwrok layer.
Slides presented at #Pragma Conference 2013
http://pragmamark.org/eventi/pragma-conference-2013/
http://pragmamark.org/sessioni/pragma-conference-2013-building-ios-app-project-and-architecture/
Designing the foundations of an iOS application is important to reduce the cost of maintenance and evolution. In this session we will see some best practices on how to organize iOS apps both from the point of view of the Xcode project and the source code. Based on the typical iOS client/server application, we will see how to structure the layers ranging from the user interface to the netwrok layer.
This set of slides introduces the reader to the concepts of Android Activities and Views. After presenting these two concepts in general terms, it continues with a detailed description of the activity lifecycle. It follows a discussion on how to structure the user interface in terms of View and ViewGroup objects. Finally, the presentation shows how to frame Android application development within the dictates of the Model-View-Controller (MVC) pattern.
Objective-C is how we’ve built Mac and iOS apps for many years. It’s a huge part of the landscape of Apple Development. And, here comes Swift which is only a year old but with lot of promises and features.
Designing the foundations of an iOS application is important to reduce the cost of maintenance and evolution. In this session we will see some best practices on how to organize iOS apps both from the point of view of the Xcode project and the source code. Based on the typical iOS client/server application, we will see how to structure the layers ranging from the user interface to the netwrok layer.
This set of slides introduces the reader to the concepts of Android Activities and Views. After presenting these two concepts in general terms, it continues with a detailed description of the activity lifecycle. It follows a discussion on how to structure the user interface in terms of View and ViewGroup objects. Finally, the presentation shows how to frame Android application development within the dictates of the Model-View-Controller (MVC) pattern.
Objective-C is how we’ve built Mac and iOS apps for many years. It’s a huge part of the landscape of Apple Development. And, here comes Swift which is only a year old but with lot of promises and features.
OOPS Concepts, Java Evolution, Class Object basic, Class Object Constructor overloading, Inheritance, Array and String, Final Abstract class and interfaces, Exceptions, Streams, GUI Applications, Applet Programming, Network Programming and Java Sockets, Multi Threading
General overview of Model View Controller design pattern for software architecture. Gives simple examples and also more complex examples using Spring MVC framework.
Android Studio is a platform where you can create your own android based application for android based devices.
This presentation will show you the step by step procedure for downloading Android Studio, installing Android Studio, managing settings of Android Studio and creating new project in Android Studio
OOPS Concepts, Java Evolution, Class Object basic, Class Object Constructor overloading, Inheritance, Array and String, Final Abstract class and interfaces, Exceptions, Streams, GUI Applications, Applet Programming, Network Programming and Java Sockets, Multi Threading
General overview of Model View Controller design pattern for software architecture. Gives simple examples and also more complex examples using Spring MVC framework.
Android Studio is a platform where you can create your own android based application for android based devices.
This presentation will show you the step by step procedure for downloading Android Studio, installing Android Studio, managing settings of Android Studio and creating new project in Android Studio
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...Yandex
In 2012 Facebook relaunched their iOS app to use native code. This was a big shift in architecting and implementing the Facebook app experience, the most widely used third party app on the entire iOS platform. Adam Ernst will speak about how the decision was made to switch to native code and how the company prepared to rewrite the app. He will share an inside look at the APIs and technical architecture Facebook uses to enable dozens of iOS developers to work on the same application. Automated testing is very important to Facebook, so Adam will also speak about how Facebook uses testing on iOS to keep the app reliable.
Simple and Detail information about the competition between android and iOS. You can get the latest data in this presentation, the current scenario of two major operating system. This presentation is about operating system not mobile phone.
If query you can mail me at abhizala@hotmail.com
Android vs iPhone - Differences in UI Patterns and DesignJeremy Johnson
While using Android over the past couple of weeks i’ve noticed some things when comparing my top apps to iOS. Both iOS and Android, in different cases, choose different UI elements to do different things. I wanted to catalog some of them here.
Overall I’d say that mainstream Android apps have improved over time, and in many cases (Spotify, Evernote, NPR, and Amazon) I liked the Android versions better. Also with design trends moving to blocky designs and flat colors (like Windows 8) - Android looks more modern in a side-by-side comparison to its iOS counterpart.
If anything this shows that there are very few standard patterns that are used 100% of the time on each OS, but there is risk of confusion from someone expecting one thing - like they have an iPad tablet, but an Android phone - and getting different results when switching between devices.
Tackling communication problems between UI and business layer in Android apps. Traditional approaches (callbacks, BroadcastReceivers) vs. new solutions (Otto, GreenRobot EventBus).
Many people consider the Objective-C a verbose language, with a cumbersome syntax, whilst it is actually a very simple language with few rules. Year after year the language has been changed many times with small but very important improvements. Particularly in the last two years many features have been added to modernize the language. In this talk you will see all the latest news and a series of best practices to improve the quality of the code
Scripting experts from Inductive Automation cover general best practices that will help you add flexibility and customization to HMI, SCADA, IIoT, and other industrial applications. Some specific tips about using scripting in the Ignition platform will be included as well.
In this webinar, learn more about:
• Common scripting pitfalls and how to avoid them
• The best programming languages to use
• Things to consider before using scripting
• How scripting environments work
• Scripting timesavers
• And more
Scripting experts from Inductive Automation cover general best practices that will help you add flexibility and customization to HMI, SCADA, IIoT, and other industrial applications. Some specific tips about using scripting in the Ignition platform will be included as well.
In this webinar, learn more about:
• Common scripting pitfalls and how to avoid them
• The best programming languages to use
• Things to consider before using scripting
• How scripting environments work
• Scripting timesavers
• And more
SharePoint 2013 Sandbox Solutions for On Premise or Office 365Ed Musters
SharePoint 2013 Declarative (no code) Sandbox Solutions presentation delivered Nov 5 at the Houston SharePoint TechFest. Were Sandbox solutions not “deprecated”? In this session you will learn that for the developer, Declarative (No Code) Sandbox solutions are still an extremely valid and completely supported way for you to create solutions that are either targeted for On Premise or Office 365. We will look at the types of features and solutions you can create with Visual Studio 2013 and the practical scenarios they enable. Examples include deployment of site columns, content types, list definitions, ribbon buttons, design assets, site pages with JavaScript, web templates, and more!
Want to learn how to use Selenium from the ground up? This presentation will show you how to start from nothing and build out a well factored, maintainable, resilient, and parallelized set of tests that will run locally, on a Continuous Integration server, and in the cloud. These tests will not only work well, but exercise relevant functionality that matters to the business.
25 Real Life Tips In Ruby on Rails DevelopmentBelighted
This is a collection of small tips and tricks related to developing web applications using the Ruby on Rails framework.
These tips are gathered from my personal experience of 4 years working with the framework, including more than 2 years of professional work at Belighted.
The talk was given in the Ruby on Rails Developer Room at Fosdem 2010 (www.fosdem.org).
Concurrency Programming in Java - 02 - Essentials of Java Part 1Sachintha Gunasena
This session discusses about the basic building blocks of java as an approach to concurrent programming in Java and include:
java, setting up the environment, common issues, building applications, application structure and elements, fields and methods, constructors, building applets, class, extending a class, building a user interface, java swing, writing servlets.
This EKON 22 conference was not about the code formatting - where we put the “begin” keyword is mostly a matter of taste and convention. But it shows how the object pascal strong typing system, and its language expressiveness may help writing clean(er) code. Abstract SOLID principles could help define the class and services hierarchy. After years of server-side coding, we propose some practical guidelines for cleaner object pascal programming, to reduce technical debt, and allow cross-platform/cross-compiler support.
The debug process constitutes an important part in an app's development cycle. Knowing the (right) tools and techniques means you can optimizes time and therefore costs. In this session we will see a number of techniques to optimize debugging of iOS applications exploiting the power of Xcode, LLDB and other support tools.
Abbiamo sognato un giorno in cui REST diventerà lo standard per tutti i servizi web, le API saranno progettate e documentate come quelle di Twitter, tutti capiranno il significato di concetti come Risorsa, URI e HATEOAS e il mondo sarà per sempre riconoscente a Roy Fielding. Abbiamo sognato … Poi ci siamo svegliati e siamo andati al lavoro. Puntualmente abbiamo trovato il seguente scenario: applicazione critica, progetto in scadenza, API server inviolabili. In questa sessione mostreremo alcune pratiche, prodotte dalle nostre Lesson Learned, per realizzare un client iOS chiamato ad interagire con API remote ponendo l'accento sull'architettura software.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
8. Naming conventions
• First establish a naming convention for all the things
for file names, class names, project names, images, etc.
• Use Pascal Case for files, folders and class
start with a capital letter i.e. Controllers, MyClass, BestAppEver, etc.
• Use Camel Case for methods, properties & variables
start with a lowercase letter i.e setFirstName:, userPassword, etc.
• Avoid using of acronyms and abbreviations
What the hell does it mean “usrPswdLbl”? Yuck!
9. Coding conventions
• Choose your coding conventions & style
there are ton of conventions out there
• K&R Style, or Allman Indent Style
http://en.wikipedia.org/wiki/Indent_style
• Also read Coding Guidelines for Cocoa by Apple
http://developer.apple.com/library/mac/#documentation/Cocoa/
Conceptual/CodingGuidelines/CodingGuidelines.html
• But most important, choose a convention and respect it
the important thing is always be consistent in your project
10. Coding Guidelines for Cocoa
An extract from “Coding Guidelines for Cocoa” By Apple
Code
insertObject:atIndex:
insert:at:
removeObjectAtIndex:
Commentary
Good.
Not clear; what is being inserted? what
does “at” signify?
Good.
removeObject:
Good, because it removes object
referred to in argument.
remove:
Not clear; what is being removed?
12. Structure
• Create a specific workspace
don’t let Xcode do it for you
• Setting up projects with correct name and prefix
use simple word (only alphanumeric) and at least 3 chars for prefix
• Create a Build Automation to scripting common tasks
to compiling source code or to deploy artifacts with one command
• Create a README file with most important info
you can use markdown syntax or other markup language like that
13. Structure
• Create a AdHoc and AppStore Build Configuration
So you can handle configuration for different destination
• Configure Build Settings to improve quality
i.e. you can enable Static Analyzer or Treat Warnings as Errors
• Manage third-part libraries with CocoaPods
it reduces headaches of storing/managing 3rd party libraries
15. Project Name & Prefix
• Choose a simple Product Name
Only alphanumeric characters, avoid
spaces
• Choose a right Class Prefix
At least 3 chars, use product name's
acronym
• Choose your Personal Prefix
Use it in your Library Projects
• Use Automatic Reference Counting
If app targets iOS 5.0 or above
16. Build Automation
• It’s the act of automating a wide variety of tasks
you can use build tools like Ant, Maven, Make , CMake or Rake
• At least you must automate Compiling and Deploying
compiling and deploying are the most common tasks for developer
• You can also automate Testing and Docs generation
they are useful to use in combination with a Continuous Integration
• You can also automate Static Code Analysis tools
for improving quality and reducing defects by inspecting C, C++ and
Objective-C code
17. Build Configurations
• Use different Configurations to specialize the behavior
i.e. Code Signing Identity, Preprocessor Macros, Linker Flags, etc.
• Use AdHoc Configuration to deploy testing app
i.e. app for TestFlight with its own Code Signing Identity & Linker Flags
• Use AppStore Configuration to deploy on App Store
Duplicate Release Configuration to use the same optimizations
18. Build Settings
• Enable Run Static Analyzer
run the Clang static analysis tool on source
files
• Enable Treat Warning as Errors
it causes all warnings to be treated as errors
• Disable Compress PNG Files
instead use ImageOptim
19. Build Settings
• Enable new -Ofast optimization Level
it maximizes optimization, use it only in Release build configuration
(Disclaimer: do not use if your application has high level floating point
precision requirement)
• Enable Link-Time Optimization
reduce binary and increase performance
20. CocoaPods
• Manage third-part libraries with CocoaPods
download from http://cocoapods.org/
• CocoaPods manage dependency for you
it download source files, imports headers and configures flags
• It’s like Ruby Gem but for Objective-C!
you can search pods, install & update with one command
21. Readme
• The Basics
Describe what it is that your project makes easier. Provide code examples
detailing how the use of the library. Document the installation process.
• Don’t get lazy just because this is for developers
Technical writing is still writing, and need not be dry and boring. Just as if
you were writing an essay or blog post, you should strive to grab the
attention of your reader early. This can be easily accomplished with a
well-written introductory paragraph.
• The code matters
Besides speaking English, your readers also understand code.
Developers love to see code samples, and a few lines of syntax
highlighted source are worth a thousand words.
http://robots.thoughtbot.com/post/50852570430/how-to-write-a-great-readme
23. Folders
• Put things in the right place
...and everything makes sense, unfortunately, Xcode doesn’t help us
• Map all Xcode group folders to file system directories
Xcode group folder don’t represent physical folder
• Please remove Supporting Files group folder
Who wants “Supporting Files” anymore? yuck!
24. My folders structure
• Application
specific app related stuff like AppDelegate, main.m, .pch etc
• Controllers
view (.xib) and view controller stuff put together (obviously)
• Library
specific application classes like helpers, base classes, services, etc
25. My folders structure
• Models
application domain models and entities, Core Data models too
• Resources
assets like images, fonts, sounds, videos, etc.
• Vendors
third part libraries and frameworks (not managed by CocoaPods)
26. Controllers
• Put .xib, .h and .m together in the same folders
• One (physical) folder for each view controller
• If there are too many, group them into a subfolder
• Group them by tab (TabBar) or by functions
27. Resources
• One folder for each type of asset
images, fonts, sounds, videos, strings, plist, samples
• One subfolder for each type of image
buttons, backgrounds, logos, shapes, icons, app (splash etc.)
• If your app support multiple themes, create a hierarchy
themes > themes name > images, fonts, etc.
• Name image files based on state (if no assets catalog)
“button_blue_normal.png”, “button_blue_highlighted.png”, etc.
33. Design
• Typically an application is divided into layers
A layer is a black box with a contract that define an input and output
• To increase the cohesion and decoupling of the software
The layers, if well designed, help to decouple and increase the cohesion
• Cohesion indicates strongly related software module
it would be a subroutine, class or library with common responsibilities
• Coupling measure the level of dependency
between two software module, such as classes, functions or library
34. Design Principles
• Single Responsibility Principle
A module should have a single responsibility, and that responsibility
should be entirely encapsulated by the module
• Open Closed Principle
A module should be open for extension but closed for modifications
• Liskov’s Substitution Principle
Derived types must be completely substitutable for their base types
35. Design Principles
• Interface Segregation Principle
Clients should not be forced to depend upon interfaces that they don't
use
• Dependency Inversion Principle
High-level modules should not depend on low-level modules. Both should
depend on abstractions. Abstractions should not depend on details.
Details should depend on abstractions
• SOLID: the "first five principles"
Single responsibility, Open-closed, Liskov substitution, Interface
segregation and Dependency inversion
36. From Principles to Patterns
• Design Pattern is a general reusable solution
to a commonly occurring problem within a given context
• It’s a description or template for how to solve a problem
It’s not a finished design that can be transformed into source code
• There are many types of design patterns
Architectural, Algorithm strategy, Computational, Implementation strategy,
Structural, etc.
37. Most Common Design Patterns
• Model View Controller Design Pattern
It’s a fundamental design pattern in Objective-C.
• Singleton Design Pattern
For your information the AppDelegate is a singleton
• Chain Of Responsibility Design Pattern
Have you ever met the Next Responder or the First Responder?
39. Layers
• Layer represents a logical section of the system
Layer enforce reusability and testability
• A typical client/server app have at least 3 layers
Presentation Layer, Business Layer and Data Access Layer
42. Presentation Layer
• It have 2 components: the UI and the presentation logic
in Cocoa the UI is the View and the presentation logic is the
(View)Controller
• Cocoa adopt Model View Controller Design Pattern
the Presentation Layer is already in iOS SDK out-of-the-box
• Advanced Appearance Customization with Theme
use Appearance Proxy and Theme technique to customize UI.
46. Business Layer
• It holds the specific app Business Logic and Behaviors
It is concerned with the retrieval, processing, transformation, and
management of application data; application of business rules and
policies
• The Domain Model is a conceptual model of business
It describes the various entities, their attributes, roles, and relationships,
plus the constraints that govern the problem domain
• Business Layer gets data through a Service Layer
Service Layer defines an application's boundary with a layer of services
that establishes a set of available operations and coordinates the
application's response in each operation
47. Domain Model Layer
• Domain Model
An object model of the domain that incorporates both behavior and data
• You can use simple Objective-C objects
A plain old Objective-C object that inheriting from NSObject
• Or you can use Core Data objects
you can extend the class NSMangedObject with your Objective-C class
48. Service Layer
• Service Layers is a design pattern
The benefits a Service Layer provides is that it defines a common set of
application operations available to different clients and coordinates the
response in each operation.
• Service Layer uses Data Access Layer to access data
Service Layer uses DAL to performs the task of retrieving and storing data
both from server via network and from database
• Service Layer is used by ViewController
No more a ton of line of codes in your ViewController, instead few lines of
simple Service Layer calls
50. Data Access Layer
• It’s a layer which provides simplified access to data
The data may be stored in a persistent storage like SQLite or in a
backend accessible by network
• It may uses a Persistence Layer or Network Layer
Both exposes a simplify contract to access data
51. Persistence Layer
• The persistence layer deals with persisting
The persistence layer is responsible for manipulating the database, and it
is used by the service layer
• You can use Core Data as Persistence Layer
Or, in alternative, you can use FMDB for direct access to SQLite
52. Network Layer
• Network Layer is responsible of all networking calls
• You can use AFNetworking as Network Layer
AFNetworking is a delightful networking library for iOS and Mac OS X. It's
built on top of NSURLConnection, NSOperation, and other familiar
Foundation technologies
54. Composition
• It’s a way to combine objects into more complex ones
Compositions are a critical building block of many basic data structures,
including the tagged union, the linked list, and the binary tree, as well as
the object used in object-oriented programming
• In a real-world app composition takes an important role
On iOS / OS X App composition is necessary for a good layering and for
a structure UI.
55. Composition
• Custom Views are an example of composition
A custom view is used to manage small portions of the interface in order
to recycle the content and its management
• In a real-world iOS/OS App there are many custom views
For example, all views that must be inserted in a scroll view, or all those
portions of the view that occur multiple times in different view and only
with different content.
57. General Best Practice
• Use Automatic Reference Counting
Always use ARC. All new code should be written using ARC, and all
legacy code should be updated to use ARC
• Use AppDelegate as Singleton
Create all common and singleton objects in App Delegate and then
expose them by UIResponder Category
58. Coding Best Practices
• Create a property for every ivar and use self to access it
Always create a @property for every data member and use “self.name” to
access it throughout your class implementation
• Alway declare “atomic” or “nonatomic” attribute
Always use the “nonatomic” attribute on your properties, unless you are
writing a thread-safe class and actually need access to be atomic
• Use literals and modern Objective-C syntactic sugar
The source code will be less verbose and more clear.
59. Presentation Best Practices
• Create a base UIViewController
Create a MYBaseViewController from which all the view controllers inherit.
In this way all the controllers can inherit common behavior.
• Create a base UIView
Create a MYBaseView from which all the custom views inherit. In this way
all the views can inherit common style and appearance
• Create a base UITableViewCell
Create a MYBaseTableViewCell from which all the custom table view cells
inherit. In this way all the cells can inherit common style and appearance
60. Code Design Best Practices
• API Design
Pay attention to the design of your API. Learn your target platform's
conventions before coding. Define the rules that are in accordance with
the convention of language
• Block and Delegation
When should I use blocks instead of delegation for callbacks? Pay
attention to this topic and alway look at Apple docs to see how they done
62. Links
• Blocks vs Delegation
http://thejoeconwayblog.wordpress.com/2012/05/29/blocks-ordelegation/
• API
Design
http://mattgemmell.com/2012/05/24/api-design/
• Modern Objective-C
http://www.slideshare.net/giuseppearici/modern-objectivec-pragma-night
63. Links
• objc.io - A periodical about best practices and advanced
techniques in Objective-C
http://www.objc.io/
• Automatic Reference Counting recap
http://www.slideshare.net/giuseppearici/pragma-nightautomaticreferencecounting
• How to write a great README
http://robots.thoughtbot.com/post/50852570430/how-to-write-a-greatreadme
64. Videos
• Customizing the Appearance of UIKit Controls
Session 114 - WWDC 2011 Session Videos
• Advanced Appearance Customization on iOS
Session 216 - WWDC 2012 Session Videos
• What’s New in the LLVM Compiler
Session 402 - WWDC 2013 Session Videos
65. Books
• Cocoa Design Patterns
• Erik M. Buck & Donald A.
Yacktman
• Addison Wesley
66. Books
• Patterns Of Enterprise Application
Architecture
• Martin Fowler
• Addison-Wesley Professional
• updates: http://martinfowler.com/
books/eaa.html
67. Thank you
Massimo Oliviero
IT Consultant & Software Developer
#pragma mark founder
!
!
email massimo.oliviero@gmail.com
web www.massimooliviero.net
slide www.slideshare.com/MassimoOliviero
twitter @maxoly
Any questions?