mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Edit code for all snippets to compile properly. Re-word some descriptions.
This commit is contained in:
parent
527fc37efa
commit
d935f8fd4e
@ -76,16 +76,16 @@ int main (int argc, const char * argv[])
|
|||||||
short fortyTwoShort = [fortyTwoShortNumber shortValue]; // or 42
|
short fortyTwoShort = [fortyTwoShortNumber shortValue]; // or 42
|
||||||
NSLog(@"%hi", fortyTwoShort);
|
NSLog(@"%hi", fortyTwoShort);
|
||||||
|
|
||||||
NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:41];
|
NSNumber *fortyOneShortNumber = [NSNumber numberWithShort:41];
|
||||||
unsigned short fortyTwoUnsigned = [fortyTwoShortNumber unsignedShortValue]; // or 41
|
unsigned short fortyOneUnsigned = [fortyOneShortNumber unsignedShortValue]; // or 41
|
||||||
NSLog(@"%hu", fortyTwoUnsigned);
|
NSLog(@"%u", fortyOneUnsigned);
|
||||||
|
|
||||||
NSNumber *fortyTwoLongNumber = @42L;
|
NSNumber *fortyTwoLongNumber = @42L;
|
||||||
long fortyTwoLong = [fortyTwoLongNumber longValue]; // or 42
|
long fortyTwoLong = [fortyTwoLongNumber longValue]; // or 42
|
||||||
NSLog(@"%li", fortyTwoLong);
|
NSLog(@"%li", fortyTwoLong);
|
||||||
|
|
||||||
NSNumber *fortyTwoLongNumber = @53L;
|
NSNumber *fiftyThreeLongNumber = @53L;
|
||||||
unsigned long fiftyThreeUnsigned = [fortyTwoLongNumber unsignedLongValue]; // or 53
|
unsigned long fiftyThreeUnsigned = [fiftyThreeLongNumber unsignedLongValue]; // or 53
|
||||||
NSLog(@"%lu", fiftyThreeUnsigned);
|
NSLog(@"%lu", fiftyThreeUnsigned);
|
||||||
|
|
||||||
// Floating point literals
|
// Floating point literals
|
||||||
@ -118,6 +118,7 @@ int main (int argc, const char * argv[])
|
|||||||
NSLog(@"%i", yesBool); // prints => 1
|
NSLog(@"%i", yesBool); // prints => 1
|
||||||
|
|
||||||
// Array object
|
// Array object
|
||||||
|
// May contain different data types, but must be an Objective-C object.
|
||||||
NSArray *anArray = @[@1, @2, @3, @4];
|
NSArray *anArray = @[@1, @2, @3, @4];
|
||||||
NSNumber *thirdNumber = anArray[2];
|
NSNumber *thirdNumber = anArray[2];
|
||||||
NSLog(@"Third number = %@", thirdNumber); // Print "Third number = 3"
|
NSLog(@"Third number = %@", thirdNumber); // Print "Third number = 3"
|
||||||
@ -148,10 +149,6 @@ int main (int argc, const char * argv[])
|
|||||||
[mutableSet addObject:@"Hello"];
|
[mutableSet addObject:@"Hello"];
|
||||||
NSLog(@"%@", mutableSet); // prints => {(Hello)}
|
NSLog(@"%@", mutableSet); // prints => {(Hello)}
|
||||||
|
|
||||||
// Set object
|
|
||||||
NSSet *set = [NSSet setWithObjects:@"Hello", @"Hello", @"World", nil];
|
|
||||||
NSLog(@"%@", set); // prints => {(Hello, World)}
|
|
||||||
|
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
// Operators
|
// Operators
|
||||||
///////////////////////////////////////
|
///////////////////////////////////////
|
||||||
@ -299,9 +296,9 @@ int main (int argc, const char * argv[])
|
|||||||
}
|
}
|
||||||
// Convenient notation for public access variables to auto generate a setter method.
|
// Convenient notation for public access variables to auto generate a setter method.
|
||||||
// By default, setter method name is 'set' followed by @property variable name.
|
// By default, setter method name is 'set' followed by @property variable name.
|
||||||
@property int count; // Setter name = 'setCount'
|
@property int count; // Setter method name = 'setCount'
|
||||||
@property (copy) NSString *name; // (copy) => Copy the object during assignment.
|
@property (copy) NSString *name; // (copy) => Copy the object during assignment.
|
||||||
@property (readonly) id data; // (readonly) => Declare only a getter method.
|
@property (readonly) id data; // (readonly) => Cannot set value outside interface.
|
||||||
// You can customize the getter and setter names instead of using default 'set' name:
|
// You can customize the getter and setter names instead of using default 'set' name:
|
||||||
@property (getter=lengthGet, setter=lengthSet:) int length;
|
@property (getter=lengthGet, setter=lengthSet:) int length;
|
||||||
|
|
||||||
@ -322,7 +319,7 @@ int main (int argc, const char * argv[])
|
|||||||
// automatically. Method name is 'set' followed by @property variable name:
|
// automatically. Method name is 'set' followed by @property variable name:
|
||||||
MyClass *myClass = [[MyClass alloc] init]; // create MyClass object instance.
|
MyClass *myClass = [[MyClass alloc] init]; // create MyClass object instance.
|
||||||
[myClass setCount:10];
|
[myClass setCount:10];
|
||||||
NSLog(@"%@", [myClass count]); // prints => 10
|
NSLog(@"%d", [myClass count]); // prints => 10
|
||||||
// Or using the custom getter and setter method defined in @interface:
|
// Or using the custom getter and setter method defined in @interface:
|
||||||
[myClass lengthSet:32];
|
[myClass lengthSet:32];
|
||||||
NSLog(@"%i", [myClass lengthGet]); // prints => 32
|
NSLog(@"%i", [myClass lengthGet]); // prints => 32
|
||||||
@ -349,7 +346,7 @@ NSLog(@"%li", distance); // prints => 18
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Constructors are a way of creating classes
|
// Constructors are a way of creating classes
|
||||||
// This is a default constructor which is called when the object is creating
|
// This is a default constructor which is called when the object is initialized.
|
||||||
- (id)init
|
- (id)init
|
||||||
{
|
{
|
||||||
if ((self = [super init]))
|
if ((self = [super init]))
|
||||||
@ -410,31 +407,34 @@ With all object interactions, follow the pattern of:
|
|||||||
(1) create the object, (2) use the object, (3) then free the object from memory.
|
(1) create the object, (2) use the object, (3) then free the object from memory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
MyClass *classVar = [MyClass alloc]; // alloc sets classVar's reference count to one. Returns pointer to object.
|
MyClass *classVar = [MyClass alloc]; // 'alloc' sets classVar's reference count to one. Returns pointer to object.
|
||||||
[classVar release]; // Decrements classVar's reference count.
|
[classVar release]; // Decrements classVar's reference count.
|
||||||
// retain claims ownership of existing object instance and increments reference count. Returns pointer to object.
|
// 'retain' claims ownership of existing object instance and increments reference count. Returns pointer to object.
|
||||||
MyClass *newVar = [classVar retain]; // If classVar is released, object is still in memory because newVar is owner.
|
MyClass *newVar = [classVar retain]; // If classVar is released, object is still in memory because newVar is owner.
|
||||||
[classVar autorelease]; // Removes ownership of object at end of @autoreleasepool block. Returns pointer to object.
|
[classVar autorelease]; // Removes ownership of object at end of @autoreleasepool block. Returns pointer to object.
|
||||||
|
|
||||||
// @property can use retain or assign as well for small convenient definitions.
|
// @property can use 'retain' and 'assign' as well for small convenient definitions.
|
||||||
@property (retain) MyClass *instance; // Release old value and retain a new one (strong reference).
|
@property (retain) MyClass *instance; // Release old value and retain a new one (strong reference).
|
||||||
@property (assign) NSSet *set; // Pointer to new value without retaining/releasing old (weak reference).
|
@property (assign) NSSet *set; // Pointer to new value without retaining/releasing old (weak reference).
|
||||||
|
|
||||||
|
// Automatic Reference Counting (ARC)
|
||||||
// Because memory management can be a pain, Xcode 4.2 and iOS 4 introduced Automatic Reference Counting (ARC).
|
// Because memory management can be a pain, Xcode 4.2 and iOS 4 introduced Automatic Reference Counting (ARC).
|
||||||
// ARC is a compiler feature that inserts retain, release, and autorelease automatically for you, so when using ARC,
|
// ARC is a compiler feature that inserts retain, release, and autorelease automatically for you, so when using ARC,
|
||||||
// you must not use retain, relase, or autorelease.
|
// you must not use retain, relase, or autorelease.
|
||||||
MyClass *arcMyClass = [[MyClass alloc] init]; // Without ARC, you will need to call: [arcMyClass release] after
|
MyClass *arcMyClass = [[MyClass alloc] init];
|
||||||
// you're done using arcMyClass. But with ARC, there is no need. It will insert this release statement for you.
|
// ... code using arcMyClass
|
||||||
|
// Without ARC, you will need to call: [arcMyClass release] after you're done using arcMyClass. But with ARC,
|
||||||
|
// there is no need. It will insert this release statement for you.
|
||||||
|
|
||||||
// As for the "assign" and "retain" @property attributes, with ARC you use "weak" and "strong".
|
// As for the 'assign' and 'retain' @property attributes, with ARC you use 'weak' and 'strong'.
|
||||||
@property (weak) MyClass *weakVar; // weak does not take ownership of object. If original instance's reference count
|
@property (weak) MyClass *weakVar; // 'weak' does not take ownership of object. If original instance's reference count
|
||||||
// is set to zero, weakVar will automatically receive value of nil to avoid application crashing.
|
// is set to zero, weakVar will automatically receive value of nil to avoid application crashing.
|
||||||
@property (strong) MyClass *strongVar; // strong takes ownership of object. Ensures object will stay in memory to use.
|
@property (strong) MyClass *strongVar; // 'strong' takes ownership of object. Ensures object will stay in memory to use.
|
||||||
|
|
||||||
// For regular variables (not @property declared variables), use the following:
|
// For regular variables (not @property declared variables), use the following:
|
||||||
__strong NSString *strongString; // Default. Variable is retained in memory until it leaves it's scope.
|
__strong NSString *strongString; // Default. Variable is retained in memory until it leaves it's scope.
|
||||||
__weak NSSet *weakSet; // Weak reference to existing object. When existing object is released, weakSet is set to nil.
|
__weak NSSet *weakSet; // Weak reference to existing object. When existing object is released, weakSet is set to nil.
|
||||||
__unsafe_unretained NSArray *unsafeArray; // Like __weak but unsafeArray not set to nil when existing object is released.
|
__unsafe_unretained NSArray *unsafeArray; // Like __weak, but unsafeArray not set to nil when existing object is released.
|
||||||
|
|
||||||
```
|
```
|
||||||
## Further Reading
|
## Further Reading
|
||||||
|
Loading…
Reference in New Issue
Block a user