Top IOS Interview Questions and Answers (Dec 2018) Part 1
Top IOS Interview Questions and Answers (Dec 2018) Part 1
iOS interview questions — Hotstar, Play24x7, Citrix etc
1. What is an “Id” in Objective-c, and how it able to support in message driven application?
Ans: id
's
definition is
typedef struct objc_object *id;
, so it pointer to a
Objc
object.
id
is a pointer
to any type, but unlike
void *
it
always points to an Objective-C object. For example, you can add
anything of type
id
to an
NSArray, but those objects must respond to
retain
and
release
.
The compiler is totally happy for you to implicitly cast any
object to id
,
and for you to cast
id
to any
object. This is unlike any other implicit casting in
Objective-C, and is the basis for most container types in Cocoa.
2. What are different design pattern to create objects?
Ans:
-
Abstract Factory
Creates an instance of several families of classes -
Builder
Separates object construction from its representation -
Factory Method
Creates an instance of several derived classes -
Object Pool
Avoid expensive acquisition and release of resources by recycling objects that are no longer in use -
Prototype
A fully initialized instance to be copied or cloned -
Singleton
A class of which only a single instance can exist
3. Given a Thread A which publishes numbers 1 to 100, Thread B which publishes A to Z. Create another Thread C which is an aggregation of Thread A & Thread B and result should be 123 A 456 B ….so on. How will you achieve it?
4. Is it possible to define different access level for individual enumeration cases?
Ans: The individual cases of an enumeration automatically receive the same access level as the enumeration they belong to. You can’t specify a different access level for individual enumeration cases.
5. if you compose a tuple from two different types, one with internal access and one with private access, the access level for that compound tuple type will be ?
Ans: The access level for a tuple type is the most restrictive access level of all types used in that tuple. The access level for that compound tuple type will be private.
NOTE
Tuple types don’t have a standalone definition in the way that classes, structures, enumerations, and functions do. A tuple type’s access level is deduced automatically when the tuple type is used, and can’t be specified explicitly.
6. Is it true that Global constants and variables are computed lazily in swift?
Ans: Global constants and variables are always computed lazily,
in a similar manner to
Lazy Stored Properties. Unlike lazy stored properties, global constants and variables
do not need to be marked with the
lazy
modifier.
Local constants and variables are never computed lazily.
7. What is failable initializer in swift?
Ans: A
failable initializer is
a type of initializer that produces an optional instance or an
implicitly unwrapped optional instance of the type the
initializer is declared on. As a result, a failable initializer
can return
nil
to indicate
that initialization failed.
To declare a failable initializer that produces an optional
instance, append a question mark to the
init
keyword in
the initializer declaration (init?
). To declare a failable initializer that produces an
implicitly unwrapped optional instance, append an exclamation
mark instead (init!
).
8. What all Declaration Modifiers are available in swift?
Ans: Declaration modifiers are keywords or context-sensitive keywords that modify the behavior or meaning of a declaration. You specify a declaration modifier by writing the appropriate keyword or context-sensitive keyword between a declaration’s attributes (if any) and the keyword that introduces the declaration.
dynamic
Apply this modifier to any member of a class that can be
represented by Objective-C. When you mark a member declaration
with the
dynamic
modifier, access to that member is always dynamically dispatched
using the Objective-C runtime. Access to that member is never
inlined or devirtualized by the compiler.
Because declarations marked with the
dynamic
modifier are dispatched using the Objective-C runtime, they must
be marked with the
objc
attribute.
final
Apply this
modifier to a class or to a property, method, or subscript
member of a class. It’s applied to a class to indicate that the
class can’t be subclassed. It’s applied to a property, method,
or subscript of a class to indicate that a class member can’t be
overridden in any subclass. For an example of how to use the
final
attribute, see
Preventing Overrides.lazy
Apply
this modifier to a stored variable property of a class or
structure to indicate that the property’s initial value is
calculated and stored at most once, when the property is first
accessed. For an example of how to use the
lazy
modifier,
see
Lazy Stored Properties.optional
Apply this modifier to a protocol’s property, method, or subscript members to indicate that a conforming type isn’t required to implement those members.
You can apply the
optional
modifier only to protocols that are marked with the
objc
attribute.
As a result, only class types can adopt and conform to a
protocol that contains optional member requirements. For more
information about how to use the
optional
modifier and for guidance about how to access optional protocol
members—for example, when you’re not sure whether a conforming
type implements them—see
Optional Protocol Requirements.
required
Apply
this modifier to a designated or convenience initializer of a
class to indicate that every subclass must implement that
initializer. The subclass’s implementation of that initializer
must also be marked with the
required
modifier.unowned
Apply this modifier to a stored variable, constant, or stored
property to indicate that the variable or property has an
unowned reference to the object stored as its value. If you try
to access the variable or property after the object has been
deallocated, a runtime error is raised. Like a weak reference,
the type of the property or value must be a class type; unlike a
weak reference, the type is nonoptional. For an example and more
information about the
unowned
modifier, see
Unowned References.unowned(safe)
An explicit spelling of
unowned
.unowned(unsafe)
Apply this modifier to a stored variable, constant, or stored
property to indicate that the variable or property has an
unowned reference to the object stored as its value. If you try
to access the variable or property after the object has been
deallocated, you’ll access the memory at the location where the
object used to be, which is a memory-unsafe operation. Like a
weak reference, the type of the property or value must be a
class type; unlike a weak reference, the type is nonoptional.
For an example and more information about the
unowned
modifier, see
Unowned References.weak
Apply
this modifier to a stored variable or stored variable property
to indicate that the variable or property has a weak reference
to the object stored as its value. The type of the variable or
property must be an optional class type. If you access the
variable or property after the object has been deallocated, its
value is nil
.
For an example and more information about the
weak
modifier,
see
Weak References.
9. What is type inference in swift?
Ans: Swift uses type inference extensively, allowing you to omit
the type or part of the type of many variables and expressions
in your code. For example, instead of writing
var x: Int = 0
,
you can write
var x = 0
,
omitting the type completely—the compiler correctly infers that
x
names a value
of type Int
.
Similarly, you can omit part of a type when the full type can be
inferred from context. For instance, if you write
let dict: Dictionary = ["A": 1]
, the compiler infers that
dict
has the
type
Dictionary<String, Int>
.
Q10. What are Relationship Delete Rules in Core Data?
Ans: A relationship’s delete rule specifies what should happen if an attempt is made to delete the source object. Note the phrasing if an attempt is made. If a relationship’s delete rule is set to Deny, it is possible that the source object will not be deleted. Consider again a department’s employees relationship and the effect of the different delete rules.
Deny
If there is at least one object at the relationship destination (employees), do not delete the source object (department).
For example, if you want to remove a department, you must ensure that all the employees in that department are first transferred elsewhere; otherwise, the department cannot be deleted.
Nullify
Remove the relationship between the objects, but do not delete either object.
This only makes sense if the department relationship for an employee is optional, or if you ensure that you set a new department for each of the employees before the next save operation.
Cascade
Delete the objects at the destination of the relationship when you delete the source.
For example, if you delete a department, fire all the employees in that department at the same time.
No Action
Do nothing to the object at the destination of the relationship.
For example, if you delete a department, leave all the employees as they are, even if they still believe they belong to that department.
Q11. How does the NSAutoreleasePool autorelease pool work?
Ans: 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.
Q12. What is trailing closure syntax?
Ans: Many functions in iOS accept multiple parameters where the final parameter is a closure. final param as a closure is calling trailing closure.
public class func animate(withDuration: TimeInterval, animations: () -> Void)
References: