Roughly, a declaration is an interface while a definition is the implementation.

This _declares_ a constant which will be _defined_ in another module:

```objc
extern NSString * const NotificationName;
```

This _defines_ and initializes the constant:

```objc
NSString * const NotificationName = @"NotificationName";
```

Note that these concepts aren't always mutually exclusive. This both declares and defines a variable `i` (since the definition marks its first appearance, it also functions as a declaration):

```objc
- (void)method {
    int i;
}
```