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.
              
                finalApply 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.lazyApply
                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
                objcattribute.
                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.
              
                requiredApply
                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.unownedApply 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.weakApply
                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: