Q:

what is the difference between NSObject and UIViewController

i am new to iphone development and i am going through tutorial and some sample. 
i want to know what is the difference between NSObject and UIViewController class and how we will come to know which class we should use. 
some are written in NSObject and some are in UIViewController. 

A:

From Wikipedia, a basic overview of object-oriented programming: 

Object-oriented programming (OOP) is a
  programming paradigm using "objects" –
  data structures consisting of data
  fields and methods together with their
  interactions – to design applications
  and computer programs. [...]  An object-oriented program will usually contain different types of objects, each type corresponding to a particular kind of complex data to be managed or perhaps to a real-world object or concept such as a bank account, a hockey player, or a bulldozer. 

In Objective-C, all Objects are based upon NSObject.  Just take this at face value for now.  If you want to use an Object, it's going to be based on NSObject.  So, unless you're using an int or a float, you're likely using something that's based on NSObject.  
NSObject in-and-of-itself, doesn't really supply any functionality.  It's your 'starting place' or 'blank slate' for an Object.  
You might build an Object definition which is used to represent an Animal, like this: 
@interface Animal : NSObject { }

@property (assign) int age;

- (Animal*)mateWith:(Animal*)lover;

@end

In this example we've described a basic Animal.  This class basically does two things; knows the age of the Animal, and can mate with another animal to produce an Animal offspring.  
You'll notice in that example that we based our Object definition on NSObject. 
Now, say we want to create a definition for a Human; well, a Human is, and always will be, a subset of all Animals.  So, we can re-use all of the logic in the Animal class definition to create a Human definition - and we might do so like this: 
@interface Human : Animal { }

- (void)lie;

@end

In this example, we've created a new definition for a type of Object called "Human".  We only defined one thing: a method which gives our class the ability to lie - except we'll also get the ability to mate because we're based on "Animal", and "Animal" already describes how to mate.  
Getting to your question: 
UIViewController contains a BUNCH of logic for doing some very complex tasks.  Most of that logic is part of the Cocoa Touch framework.  
If you're making an "Animal" class, you don't need to know how to respond to user input from the screen, you don't need to know how to manage a UIView, you don't need to keep track of parentViewControllers, etc.  So, basing our Animal class on UIViewController would be silly.  This is when NOT to use UIViewController.  
Now, if you've making a user interface screen on the iPhone, and you want to perform some routine when the user clicks on a button - then you DO need all of the UIViewController stuff, so you'd subclass that.  
I can understand why, if you're not coming from an Object Oriented Programming background, you might be confused about this.  It seems like most of the things you'd need to create ARE UIViewController subclasses.  However, as you explore the world of OOP, you'll discover that not only are Objects something someone else wrote that you can use - but they are things you'll want to create from the ground up to accomplish things you used to do procedurally.  
Best of luck on your exciting journey.  
I'd highly recommend you take a trip to your local Barnes and Noble or head over to Amazon.com and pick up some books on the topic - if you have a friend who already knows OOP a good mentor is much faster than learning yourself.  
Don't forget, on the iPhone, you'll have to deal with memory management as well.  This is a sticking point for a lot of people - and causes a lot of headaches if you don't follow the rules.  Learn them early and you'll be served well.  
Hope that helped, 
Cheers.  
Sources: 

http://en.wikipedia.org/wiki/Object-oriented_programming

A:

UIViewController is a subclass of UIResponder which is itself a subclass of NSObject which is a root class (i.e. not a subclass of anything). 
This means that any method for NSObject may be called on UIViewController, but not conversely.  If you look at the UIViewController Class Reference, it has all of the properties and methods available to you if you use this class.  In addition, you automatically get all of the methods for an NSObject (listed in the NSObject Class Reference). 
I use a UIViewController for every view that I maintain.  I almost never use an object directly as an NSObject, though I often subclass NSObject and I never subclass UIViewController.  But this is just me. 
I recommend you take a look at Apple's View Controller Programming Guide to see what benefits using a UIViewController offers. 

A:

NSObject means it inherits the ObjectProperties only. It doesn't have view. But  UIViewcontroller is having the view itself. It can control the views also. 
When you don't want  a view then you can use the NSObject. If you need viewcontroller or view then you can use the UIViewController.