There are many differences of opinion as to whether Objective-C or Java is the more comprehensive, compact and user-friendly programming language. In what follows, we will compare the two languages on the basis of a few important parameters.
The iOS app vs Android app development debate will rage on for times to come. While potential profitability is an important factor, mobile app developers are also divided in their opinions as to whether Java (required for Android development) or Objective-C (required for iOS development) is an easier, more useful language. Contrary to what many beginners believe, Apple Swift is NOT a substitute of Objective C. Over here, we will compare the two programming languages based on some key parameters:
- Ease of learning – Although this differs from person to person, app developers have a tendency to try to learn Objective C first. This probably has a bit to do with the better revenues that iPhone apps have the potential to earn, in comparison to Android applications. On the other hand, there is a school of thought that Java is a lot more ‘modern’ language, while Objective-C is, in essence, rather archaic. Stuff like DRY-violation and split headers in Obj.-C are indeed hardly of any use.
- Static vs dynamic – Android fans might opine that Objective-C is a ‘language of the ‘90s’, but the fact remains that it is still more dynamic than Java. The technique for ‘Method Invocation’ demonstrates this the best. While in Java, core data and proxy objects have to be handled by ciders, Objective C allows developers to implement the way simpler ‘message passing’ method. All that is required is passing the text string to the corresponding object.
- Extent of manual coding required – Java would edge this round, since even dedicated iPhone app development experts agree that programming in Objective-C requires significantly more manual typing. What is often overlooked is the fact that method names in the Cocoa framework are, by default, longer. Hence, it is not a fault of the language per se – and in any case, new, shorter methods can be declared. For that, coders have to be really proficient in handling function pointers though.
- Creation of instance variables – All instance variables (attributes from class instances) in Objective C have to be defined in a .h interface file. Attributes are declared with the ‘NSString *AttributeA’ line. In Java, however, instance variables cannot be accessed/initialized via classes. Separate ‘class instances’ are required for the purpose. In addition, attributes in Objective-C are protected, unless something is defined as ‘Special’.
- Run-Time performance – While creating iOS apps, developers benefit a lot from the top-notch run-time performance of the compiled Objective-C programming language (OO). Since Java codes have to be compiled as well as interpreted, the performance speeds tend to be lower. However, in terms of general acceptance among new programmers, this is not much of an issue.
- Garbage collection vs Pointers – These are the two techniques used in Java and Objective-C (respectively) for memory allocation and management. Most professional coders from mobile app agencies feel that the ‘garbage collection’ method is more efficient than the ‘pointers’ and ‘reference counting’ in Obj.-C – which can be confusing at times. The way in which values are returned by methods in Objective-C is also non-intuitive, and that’s a thumbs-down too. While coding for iOS apps, developers have to constantly check whether the previously allocated objects are getting removed, so that the available memory is not getting clogged. This is generally not required while working with Java.
- Source syntax – The syntax of the two languages are, understandably, different – although it would be waste of time to argue whether one of them is ‘simpler’ than the other. Java derives its syntax from C++ (a familiar language for most developers), while that for Objective-C is based on the basic C language. There are OO extensions available for the Apple language, which are somewhat similar to the syntax of SmallTalk.
- Constructors and code reusability – Web and mobile app developers love languages that allow them to reuse codes – and Objective C performs better on this count. All the initializers defined in the same class can be reused in this programming language. Java requires the use of ‘constructors’ for variable initialization. These ‘constructors’ often cause code duplication and are, barring a few exceptions, not reusable. There is no concept of ‘constructors’ in Objective C, and regular methods can be called to initialize variables.
- Design patterns – When it comes to creating better user-interfaces in mobile apps, Java has an edge over Objective-C. However, the former is a bit more complicated than the default model-view-controller (MVC) design pattern layout of Objective C. For coding in Java, developers have to know how to work with ‘Activities’ and ‘Intents’ (which are, in essence, a variant of ‘commands’). Although both the languages support XML for declaring user-preferences, the framework in Java is extensible and hence, more user-friendly.
- Handling data structures – It is relatively simpler to create and handle various data structures (points, rectangles, etc.) in Objective C – simply because all of them are treated as value types and a copy of each of them is automatically created. As a result, simple ‘C structs’ can be used to access these data/value types. Java lags behind over here – since data structures here are are allocated in the ‘head’ of code snippets and generally used/transferred as references. This, in turn, makes Android app testing a more tricky process – and probability of the presence of bugs is also higher.
- Access to scalar types – Both Java and Objective C can access scalar types. The latter, by virtue of being a C-superset, can be used to access unions and structures as well – which is not possible with Java. The overall set of scalar types compatible with Obj-C is also higher than that in the Java environment. What’s more, writing Java interfaces can necessitate runtime overheads, while all C-software libraries can be accessed for free.
- Visibility modifiers – Java offers more flexibility to programmers and app developers for determining the visibility of attributes/variables in the codes. There are four visibility modifiers in the Android language (‘default’, ‘public’, ‘private’ and ‘protected’), any of which can be used as per the precise requirement in a program. In Objective C, all variables declared as ‘static’ are ‘private’. Public or protected classes do not feature in the Obj.-C framework.
- Availability of references/samples – Mobile app developers can find loads of resources, sample videos and other references for both Objective-C as well as Java on the web. If one were to really pick, it can be said that the Apple tutorial videos are rather too elaborate – and there are several things that require too long to be learnt (which should not be the case). The Android SDK comes with API reference, which is a big advantage. Resources for Java (including ApiDemons samples) are more methodically organized, and the ready availability of sample projects on API usage and data architecture management comes in handy too.
- Xcode vs Eclipse – Another popular debate among programmers revolves around which of the languages has the better integrated development environment (IDE). Android app experts unanimously agree that the real-time feedback (errors and warnings generated via incremental compiler) in Eclipse makes it a more user-friendly IDE than Objective C’s Xcode. For big programs, the waiting-for-feedback period can be long in Xcode, while the ‘Project Tree View’ (while accurate) has a dated feel too. The ‘content assist’ feature of the IDEs are more or less at par.
The presence of Grand Central dispatch at the operating system level is a significant advantage of Objective-C. On the flipside, it does not have any built-in tool support, unlike Java – in which remote system class downloading is supported. Both the languages have their specific plus points – the wider acceptance of Java is countered by Apple’s dedicated support for Objective-C – and it would be fair to say that the final say as to which one is a ‘better’ language depends on the proficiency of individual developers.
Which one do you feel is the easier and more user-friendly language?