Dear readers, these iOS Interview Questions have been designed specially to get you acquainted with the nature of questions you may encounter during your Job interview for the subject of iOS. As per my experience good interviewers hardly plan to ask any particular question during your Job interview, normally questions start with some basic concept of the subject and later they continue based on further discussion and what you answers:
The latest version of iOS is 12.1.1.
Xcode- 10.0
The latest version of macOS is macOS 10.14
1024X768
375 x 667
1. SMS OTP auto-fill
2. Gestures on iPad, just like iPhone X
3. Multiple faces on Face ID
4. QR code scanner in Control Centre
5. Automatic software updates
6. Siri Shortcuts
7. Hey Siri works in low power mode
8. Revamped Photos app
9. Activity stickers for Apple Watch
10. Favicons in Safari iPad
11. Autofill passwords via third-party password managers
12. Detailed battery stats
13. Hindi-English dictionary
14. Thesaurus
15. Voice memo settings
16. Podcast app settings
17. Press space to select text on devices without 3D Touch
18. Air quality reading in Weather app
Broad cox and Tom Love.
Cocoa is for Mac App development and cocoa touch is for apples touch devices - that provide all development environment
*Objective-C is a reflective, object-oriented programming language which adds Smalltalk-style messaging to the C programming language. strictly superset of c.
- (return_type)methodName:(data_type)parameter_name : (data_type)parameter_name
Property allow declared variables with specification like atomic/nonatmic, or retain/assign.
copy object during assignment and increases retain count by 1.
Declare read only object / declare only getter method.
Specifies that retain should be invoked on the object upon assignment. takes ownership of an object.
Specifies that the setter uses simple assignment. Uses on attribute of scalar type like float,int.
"atomic", the synthesized setter/getter will ensure that a whole value is always returned from the getter or set by the setter, only single thread can access variable to get or set value at a time.
In non atomic no such guaranty that value is returned from variable is same that setter sets. at same time.
Retain -Specifies that retain should be invoked on the object upon assignment. takes ownership of an object
Assign - Specifies that the setter uses simple assignment. Uses on attribute of scalar type like float,int.
ask the compiler to generate the setter and getter methods according to the specification in the declaration.
A protocol declares methods that can be implemented by any class. Protocols are not classes themselves. They simply define an interface that other objects are responsible for implementing. Protocols have many advantages.
The idea is to provide a way for classes to share the same method and property declarations without inheriting them from a common ancestor.
The UIApplication class implements the required behavior of an application.
The Apple compilers are based on the compilers of the GNU Compiler Collection.
The @synchronized()directive locks a section of code for use by a single thread. Other threads are blocked until the thread exits the protected code.
interface declares the behavior of class and implementation defines the behavior of class.
private - limits the scope class variable to the class that declares it.
protected - Limits instance variable scope to declaring and inheriting classes.
public - Removes restrictions on the scope of instance variables.
Instructs the compiler not to generate a warning if it cannot find implementations of accessor methods associated with the properties whose names follow.
A delegate is an object that will respond to pre-chosen selectors (function calls) at some point in the future., need to implement the protocol method by the delegate object.
provides a mechanism for broadcasting information within a program, using notification we can send message to other object by adding observer .
protocol is used the declare a set of methods that a class that "adopts" (declares that it will use this protocol) will implement.
Delegates are a use of the language feature of protocols. The delegation design pattern is a way of designing your code to use protocols where necessary.
to get the any update /alert from server .
Dealing with sqlite database in iOS:
1. Create database : sqlite3 AnimalDatabase.sql
2.Create table and insert data in to table :
CREATE TABLE animals ( id INTEGER PRIMARY KEY, name VARCHAR(50), description TEXT, image VARCHAR(255) );
INSERT INTO animals (name, description, image) VALUES ('Elephant', 'The elephant is a very large animal that lives in Africa and Asia', 'http://dblog.com.au/wp-content/elephant.jpg');
3. Create new app --> Add SQLite framework and database file to project
4. Read the database and close it once work done with database :
// Setup the database object
sqlite3 *database;
// Init the animals Array
animals = [[NSMutableArray alloc] init];
// Open the database from the users filessytem
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
// Setup the SQL Statement and compile it for faster access
const char *sqlStatement = "select * from animals";
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *aDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSString *aImageUrl = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
// Create a new animal object with the data from the database
Animal *animal = [[Animal alloc] initWithName:aName description:aDescription url:aImageUrl];
// Add the animal object to the animals Array
[animals addObject:animal];
[animal release];
}
}
// Release the compiled statement from memory
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
With Storyboards, all screens are stored in a single file. This gives you a conceptual overview of the visual representation for the app and shows you how the screens are connected. Xcode provides a built-in editor to layout the Storyboards.
.storyboard is essentially one single file for all your screens in the app and it shows the flow of the screens. You can add segues/transitions between screens, this way. So, this minimizes the boilerplate code required to manage multiple screens.
A category allows you to add methods to an existing class—even to one for which you do not have the source.
Blocks are a language-level feature added to C, Objective-C and C++, which allow you to create distinct segments of code that can be passed around to methods or functions as if they were values. Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDictionary. They also have the ability to capture values from the enclosing scope, making them similar to closures or lambdas in other programming languages.
Using NSXMLParser.
Create xml parser object with xml data, set its delegate , and call the parse method with parserObject.
Delegate methods getting called :
– parserDidStartDocument:
– parserDidEndDocument:
– parser:didStartElement:namespaceURI:qualifiedName:attributes:
– parser:didEndElement:namespaceURI:qualifiedName:
– parser:didStartMappingPrefix:toURI:
– parser:didEndMappingPrefix:
– parser:resolveExternalEntityName:systemID:
– parser:parseErrorOccurred:
– parser:validationErrorOccurred:
– parser:foundCharacters:
– parser:foundIgnorableWhitespace:
– parser:foundProcessingInstructionWithTarget:data:
– parser:foundComment:
– parser:foundCDATA:
By using NSJSONSerialization.
For example : NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
By using dequeReusableCellWithIdentifier
*strong -o "own" the object you are referencing with this property/variable. The compiler will take care that any object that you assign to this property will not be destroyed as long as you (or any other object) points to it with a strong reference.
*Weak - weak reference you signify that you don't want to have control over the object's lifetime. The object you are referencing weakly only lives on because at least one other object holds a strong reference to it. Once that is no longer the case, the object gets destroyed and your weak property will automatically get set to nil.
complier with be responsible for lifetime of object which is declared as strong. for weak object - compiler will destroy object once strong reference that hold weak object get destroyed.
Automatic reference counting (ARC) If the compiler can recognize where you should be retaining and releasing objects, and put the retain and release statement in code.
In Manual memory management developers is responsible for life cycle of object. developer has to retain /alloc and release the object wherever needed.
By using -
1. Static analyzer.
2. Instrument
An operation object is a single-shot object—that is, it executes its task once and cannot be used to execute it again. You typically execute operations by adding them to an operation queueAn NSOperationQueue object is a queue that handles objects of the NSOperation class type. An NSOperation object, simply phrased, represents a single task, including both the data and the code related to the task. The NSOperationQueue handles and manages the execution of all the NSOperation objects (the tasks) that have been added to it.
Every time -autorelease is sent to an object, it is added to the inner-most autorelease pool. When the pool is drained, it simply sends -release to all the objects in the pool.
Autorelease pools are simply a convenience that allows you to defer sending -release until "later". That "later" can happen in several places, but the most common in Cocoa GUI apps is at the end of the current run loop cycle.
Nil is meant for class pointers, and nil is meant for object pointers
for(id object in objets){
}
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg on NSObject
NSThread* evtThread = [ [NSThread alloc] initWithTarget:self
selector:@selector( saySomething )
object:nil ];
[ evtThread start ];
By Using NSURLConnection , by starting connection or sending synchronous request.
In synchronous request main thread gets block and control will not get back to user till that request gets execute.
In Asynchronous control gets back to user even if request is getting execute.
SAX (Simple API for XML)
Parses node by node
Doesn't store the XML in memory
We can not insert or delete a node
Top to bottom traversing
DOM (Document Object Model)
Stores the entire XML document into memory before processing
Occupies more memory
We can insert or delete nodes
Traverse in any direction
loadView - viewDidLoad-viewWillAppear-viewDidAppear - viewDisappear - viewDidUnload
There is a huge difference between these two. SQLLite is a database itself like we have MS SQL Server. But CoreData is an ORM (Object Relational Model) which creates a layer between the database and the UI. It speeds-up the process of interaction as we dont have to write queries, just work with the ORM and let ORM handles the backend. For save or retrieval of large data, I recommend to use Core Data because of its abilities to handle the less processing speed of IPhone.
NSFetchedResultsController - It is designed primarily to function as a data source for a UITableView
ApplicationDidFinishLaunchingWithOption -ApplicationWillResignActive- ApplicationDidBecomeActive-ApplicationWillTerminate
release - destroy the object from memory,
autorelease - destroy the object from memory in future when it is not in use.
- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg on NSObject
App will crash with exception unrecognized selector sent to instance.
Server - Apple server - device by using APNs.