Home Test Your Knowledge Objective-C Skill Assessment Quiz

Objective-C Skill Assessment Quiz

by Krishna Jaiswal
26 minutes read

Table of Contents

Objective-C Skill Assessment Quiz | Test Your Knowledge | Objective-C is a high-level general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. Originally developed by Brad Cox and Tom Love in the early 1980s, it was selected by NeXT for its NeXTSTEP operating system.

Q1. What is the value of s?

NSMutableString *s = [NSMutableString stringWithString: @"123"];
[s appendString: @"456"];
  •  123456
  •  123
  •  456
  •  This code contains an error.

Q2. What’s the value of i after these statements?

NSString *str = nil;
NSInteger i = str.integerValue;
  •  nil
  •  0 (technically nil == 0 but i will have a literal value of 0 and not the void* value of nil)
  •  -1
  •  This code crashes.

Q3. What value is in str after this line in executed?

NSString str = "test" + " " + "more";

  •  This code contains an error
  •  test
  •  nil
  •  test more

Q4. What does this code print?

    NSPredicate *p2 = [NSPredicate predicateWithBlock:^BOOL(NSString*  evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
      return evaluatedObject.intValue % 2 == 0;
    }];
    NSArray *vals = @[@"1", @"2", @"3"];
    NSArray *n2 = [vals filteredArrayUsingPredicate:p2];
    NSLog(@"%@", n2.firstObject);
  •  2
  •  1,2,3
  •  1,2
  •  Nothing, since this code contains an error.

Q5. Property defaults include _?

  •  atomic/strong
  •  atomic/weak
  •  nonatomic/weak
  •  nonatomic/strong

Q6. What is the key difference between NSDictionary and NSMutableDictionary?

  •  NSMutableDictionary’s values can change
  •  NSMutableDictionary has not initializers.
  •  NSDictionary can’t be copied.
  •  NSDictionary’s values can change.

Q7. What is foo?

-(float)foo;

  •  A function with a return type of float.
  •  This code contains an error.
  •  A variable declaration of type float.
  •  A property of type float.

Q8. What can you glean from this line?

#import "NSString+NameHelper.h"

  •  NameHelper is a category of NSString.
  •  NameHelper is a subclass of NSString.
  •  NSString implements the NameHelper protocol.
  •  NSString has a helper class.

Q9. What’s wrong with this code?

float x = 5.;

  •  Nothing is wrong with this code.
  •  Declarations do not need semicolons.
  •  x=5 is an invalid float.
  •  Variables can’t be declared and initialized in the same state.

Q10. How many times with this loop be executed?

for (int x=0; x<100; x++) {
  x = x + 1;
}
  •  50
  •  99
  •  100
  •  This code contains an error.

Q11. What is this code an example of?

[self addObserver: self forKeyPath: @"val" options:0 context: nil];

  •  Key-Value Observing
  •  Class Value Observing
  •  Key-Data Observing
  •  KeyPath Observing

Q12. What does ARC stand for?

  •  Automatic Reference Counting
  •  Automatic Retain Checking
  •  Async Retain Cycles
  •  Automatic Release Code

Q13. What is printed for this code?

int val = 0;
val = 1.5;
printf("%d", val);
  •  1
  •  2
  •  0
  •  This code contains an error.

Q14. What best describes class inheritance in Objective-C?

  •  single inheritance but multiple protocol implementation
  •  Objective-C doesn’t support inheritance
  •  dual class inheritance
  •  unlimited class inheritance and protocol adherence

Q15. How many keys does this NSDictionary have after this code is executed?

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: @"b", @"e", @"a", @"r", nil];

  •  2
  •  4
  •  5
  •  This code contains an error.

Q16. What is wrong with this code?

NSMutableDictionary *dict1 = [NSMutableDictionary dictionaryWithCapacity:5];
[dict1 setValue:@"key" forKey:@"value"];
  •  The key and value items are mixed
  •  Nothing is wrong with it
  •  You can’t set the capacity of a dictionary
  •  NSMutableDictionary doesn’t have a :setValue:forKey function.

Q17. What is printed from this code?

NSData *data = [@"print" dataUsingEncoding:NSASCIIStringEncoding];
NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
  •  print
  •  This code is invalid
  •  Nothing is printed from this code.
  •  nil

Q18. What is different about this function?

+(void)doSomething;

  •  It is static
  •  It is abstract.
  •  It is inline.
  •  This code contains an error.

Q19. Structs can have _?

  •  functions
  •  initializers
  •  fields
  •  all of these answers

Q20. What is wrong with this code?

@interface MyClass : NSObject
    @property (strong, nonatomic, readonly) NSString *name;
  @end
  •  There is nothing wrong with this code.
  •  There is not read-only directive.
  •  MyClass doesn’t implement NSObject.
  •  Properties are declared in the implementation.

Q21. What is an enums base type for the code below?

typedef enum { Foo1, Foo2} Foo;

  •  There is no base type.
  •  NSObject
  •  int
  •  NSNumber

Q22. If you want to store a small amount of information (e.g., user settings), whats the best, built-in way to go?

  •  UserDefaults
  •  plist file
  •  CoreData
  •  TextFile

Q23. What are categories used for?

  •  to extend other classes
  •  to manage access control
  •  to coordinate objects
  •  to group classes

Q24. What is this Objective-C code checking?

if ([keyPath isInstanceOf:[NSString class]]) {
}
  •  This code contains an error
  •  if keyPath is an instance of NSString
  •  if keyPath’s baseclass is the same as NSString’s baseclass
  •  if keyPath implements the same methods as NSString

Q25. What is this a declaration of?

int(^foo)(int);

  •  an Extension
  •  a Generic
  •  a block of code
  •  an abstract class

Q26. For observing changes to a property, which of these two statements cause the related method to be called and why?

1. _val = 1;
2. self.val= 100;
  •  Statement 2, since it calls the auto-created setter on the property.
  •  Statement 1, since it uses the property directly.
  •  Statement 2, since it specifies the class instance to use.
  •  Statement 1, since it calls the auto-created setter on the property.

Q27. What is wrong with this code?

float x = 2.0;
int(^foo)(int) = ^(int n1) {
  return (int)(n1*x);
};
foo(5);
  •  Ints and floats can’t be multiplied.
  •  The parameter isn’t declared correctly.
  •  x is not in the right scope.
  •  Nothing is wrong with this code.

Q28. What’s the difference between an array and a set?

  •  Arrays are ordered, non-unique values.
  •  Arrays are stored sorted.
  •  Sets are ordered, unique values.
  •  Sets can contain nils.

Q29. Dot notation can be used for _?

  •  nothing, as they’re never used in Objective-C
  •  function calls only
  •  property getter/setter
  •  parameter delimiters

Q30. What is the value of newVals after this code is executed?

    NSArray *vals = @[@"1", @"2", @"3"];
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF.intValue > 1"];
    NSArray *newVals = [vals filteredArrayUsingPredicate:pred];
  •  2,3
  •  nil
  •  This code contains an error
  •  2,”3″

Q31. How would this function be called?

-(int)foo:(int)a b:(int)c;

  •  self.foo(5, b:10);
  •  This code contains an error.
  •  [self foo:5:10:20];
  •  [self foo:5 b:10];

Q32. What is the type of the error return value stored in json?

    NSError *error;
    NSData *data;
    id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
  •  NSString
  •  NSArray
  •  id
  •  NSDictionary

Q33. What is significant about this function declaration?

    -(void)testFunc:(NSString**)str;
  •  The parameter is passed by value and can not be changed
  •  ** is not allowed on a parameter
  •  The parameter may be nil
  •  The parameter is passed by reference and may be changed

Q34. What is printed from this code execution?

    typedef enum {
        thing1,
        thing2,
        thing3
    } Thing;


    -(void) enumStuff {
        NSLog(@"%d", thing2);
    }
  •  0
  •  1
  •  thing2
  •  This code does not print anything

Q35. You are worried about threaded access to a property and possible collision in writing. What directive should you use on the property?

  •  non-atomic
  •  strong
  •  weak
  •  atomic

Q36. What is wrong with this line of code?

int temp = 1==1;
  •  temp is a keyword.
  •  1==1 is invalid.
  •  1==1 evaluates to a Boolean.
  •  Nothing is wrong with it.

Q37. What is special about the code within this block?

dispatch_async(dispatch_get_main_queue(), ^{
// code
});
  •  It executes on the main queue.
  •  It is the last code to run before the app goes inactive.
  •  It executes on a background thread.
  •  It is queued to execute in the background.

Q38. How many items are in set1 after this code executes?

NSMutableSet *set1 = [NSMutableSet setWithObjects: @1,@2, @3, @4, @5, nil];
[set1 add0bject:@3];
  •  zero
  •  six
  •  one
  •  five

Q39. What is wrong with this code?

NSDictionary *d1 = @[@"v1", @4, @"v2", @5.6, @"v3"];
NSlog(@"d1: %@", d1);
  •  NSDictionary cannot be printed this way.
  •  The last key is missing a value.
  •  Dictionaries cannot have mixed types as values.
  •  d1 is assigned an NSArray of values.

related posts

Leave a Comment

Enable Notifications OK No thanks