summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNami-Doc <vendethiel@hotmail.fr>2013-12-30 16:18:51 -0800
committerNami-Doc <vendethiel@hotmail.fr>2013-12-30 16:18:51 -0800
commit4f97211e8e5a183408f591a70e3ab6815ef8867e (patch)
treea8cda16360064f6a95f034aff6aa4040e6502f67
parente97b02c0d5149363f96cf80aa0dd3d89ec28298d (diff)
parent03ada8d9751993ad1b36d3d5848678b31ac9021c (diff)
Merge pull request #470 from levibostian/objective-c-properties
[objective-c/en] Objective-C property examples
-rw-r--r--objective-c.html.markdown104
1 files changed, 89 insertions, 15 deletions
diff --git a/objective-c.html.markdown b/objective-c.html.markdown
index 1ed0ed58..419c0475 100644
--- a/objective-c.html.markdown
+++ b/objective-c.html.markdown
@@ -50,52 +50,101 @@ int main (int argc, const char * argv[])
// String
NSString *worldString = @"World";
- NSLog(@"Hello %@!", worldString); // Print "Hello World!"
+ NSLog(@"Hello %@!", worldString); // prints => "Hello World!"
+ // NSMutableString is a mutable version of the NSString object.
+ NSMutableString *mutableString = [NSMutableString stringWithString:@"Hello"];
+ [mutableString appendString:@" World!"];
+ NSLog(@"%@", mutableString); // prints => "Hello World!"
// Character literals
NSNumber *theLetterZNumber = @'Z';
- char theLetterZ = [theLetterZNumber charValue];
+ char theLetterZ = [theLetterZNumber charValue]; // or 'Z'
NSLog(@"%c", theLetterZ);
// Integral literals
NSNumber *fortyTwoNumber = @42;
- int fortyTwo = [fortyTwoNumber intValue];
+ int fortyTwo = [fortyTwoNumber intValue]; // or 42
NSLog(@"%i", fortyTwo);
NSNumber *fortyTwoUnsignedNumber = @42U;
- unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue];
+ unsigned int fortyTwoUnsigned = [fortyTwoUnsignedNumber unsignedIntValue]; // or 42
NSLog(@"%u", fortyTwoUnsigned);
NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:42];
- short fortyTwoShort = [fortyTwoShortNumber shortValue];
+ short fortyTwoShort = [fortyTwoShortNumber shortValue]; // or 42
NSLog(@"%hi", fortyTwoShort);
+
+ NSNumber *fortyTwoShortNumber = [NSNumber numberWithShort:41];
+ unsigned short fortyTwoUnsigned = [fortyTwoShortNumber unsignedShortValue]; // or 41
+ NSLog(@"%hu", fortyTwoUnsigned);
NSNumber *fortyTwoLongNumber = @42L;
- long fortyTwoLong = [fortyTwoLongNumber longValue];
+ long fortyTwoLong = [fortyTwoLongNumber longValue]; // or 42
NSLog(@"%li", fortyTwoLong);
+ NSNumber *fortyTwoLongNumber = @53L;
+ unsigned long fiftyThreeUnsigned = [fortyTwoLongNumber unsignedLongValue]; // or 53
+ NSLog(@"%lu", fiftyThreeUnsigned);
+
// Floating point literals
NSNumber *piFloatNumber = @3.141592654F;
- float piFloat = [piFloatNumber floatValue];
- NSLog(@"%f", piFloat);
+ float piFloat = [piFloatNumber floatValue]; // or 3.141592654f
+ NSLog(@"%f", piFloat); // prints => 3.141592654
+ NSLog(@"%5.2f", piFloat); // prints => " 3.14"
NSNumber *piDoubleNumber = @3.1415926535;
- double piDouble = [piDoubleNumber doubleValue];
+ double piDouble = [piDoubleNumber doubleValue]; // or 3.1415926535
NSLog(@"%f", piDouble);
+ NSLog(@"%4.2f", piDouble); // prints => "3.14"
+
+ // NSDecimalNumber is a fixed-point class that's more precise then float or double
+ NSDecimalNumber *oneDecNum = [NSDecimalNumber decimalNumberWithString:@"10.99"];
+ NSDecimalNumber *twoDecNum = [NSDecimalNumber decimalNumberWithString:@"5.002"];
+ // NSDecimalNumber isn't able to use standard +, -, *, / operators so it provides its own:
+ [oneDecNum decimalNumberByAdding:twoDecNum];
+ [oneDecNum decimalNumberBySubtracting:twoDecNum];
+ [oneDecNum decimalNumberByMultiplyingBy:twoDecNum];
+ [oneDecNum decimalNumberByDividingBy:twoDecNum];
+ NSLog(@"%@", oneDecNum); // prints => 10.99 as NSDecimalNumber is immutable.
// BOOL literals
NSNumber *yesNumber = @YES;
NSNumber *noNumber = @NO;
+ // or
+ BOOL yesBool = YES;
+ BOOL noBool = NO;
+ NSLog(@"%i", yesBool); // prints => 1
// Array object
NSArray *anArray = @[@1, @2, @3, @4];
NSNumber *thirdNumber = anArray[2];
NSLog(@"Third number = %@", thirdNumber); // Print "Third number = 3"
+ // NSMutableArray is mutable version of NSArray allowing to change items in array
+ // and extend or shrink array object. Convenient, but not as efficient as NSArray.
+ NSMutableArray *mutableArray = [NSMutableArray arrayWithCapacity:2];
+ [mutableArray addObject:@"Hello"];
+ [mutableArray addObject:@"World"];
+ [mutableArray removeObjectAtIndex:0];
+ NSLog(@"%@", [mutableArray objectAtIndex:0]); // prints => "World"
// Dictionary object
NSDictionary *aDictionary = @{ @"key1" : @"value1", @"key2" : @"value2" };
NSObject *valueObject = aDictionary[@"A Key"];
NSLog(@"Object = %@", valueObject); // Print "Object = (null)"
+ // NSMutableDictionary also available as a mutable dictionary object.
+ NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithCapacity:2];
+ [mutableDictionary setObject:@"value1" forKey:@"key1"];
+ [mutableDictionary setObject:@"value2" forKey:@"key2"];
+ [mutableDictionary removeObjectForKey:@"key1"];
+
+ // Set object
+ NSSet *set = [NSSet setWithObjects:@"Hello", @"Hello", @"World", nil];
+ NSLog(@"%@", set); // prints => {(Hello, World)} (may be in different order)
+ // NSMutableSet also available as a mutable set object.
+ NSMutableSet *mutableSet = [NSMutableSet setWithCapacity:2];
+ [mutableSet addObject:@"Hello"];
+ [mutableSet addObject:@"Hello"];
+ NSLog(@"%@", mutableSet); // prints => {(Hello)}
///////////////////////////////////////
// Operators
@@ -176,6 +225,14 @@ int main (int argc, const char * argv[])
// "2,"
// "3,"
+ // Object for loop statement. Can be used with any Objective-C object type.
+ for (id item in values) {
+ NSLog(@"%@,", item);
+ } // => prints "0,"
+ // "1,"
+ // "2,"
+ // "3,"
+
// Try-Catch-Finally statements
@try
{
@@ -225,14 +282,30 @@ int main (int argc, const char * argv[])
// @end
@interface MyClass : NSObject <MyProtocol>
{
- int count;
- id data;
- NSString *name;
+ // Instance variable declarations (can exist in either interface or implementation file)
+ int count; // Protected access by default.
+ @private id data; // Private access. (More convenient to declare in implementation file)
+ NSString *name;
}
-// Convenience notation to auto generate public getter and setter
+// Convenient notation to auto generate public access getter and setter
@property int count;
@property (copy) NSString *name; // Copy the object during assignment.
@property (readonly) id data; // Declare only a getter method.
+// To access public variable in implementation file, use '_' followed by variable name:
+_count = 5;
+NSLog(@"%d", _count); // prints => 5
+// To access public variable outside implementation file, @property generates setter method
+// automatically. Method name is 'set' followed by @property variable name:
+MyClass *myClass = [[MyClass alloc] init]; // create MyClass object instance.
+[myClass setCount:10];
+NSLog(@"%@", [myClass count]); // prints => 10
+// You can customize the getter and setter names instead of using default 'set' name:
+@property (getter=countGet, setter=countSet:) int count;
+[myClass countSet:32];
+NSLog(@"%i", [myClass countGet]); // prints => 32
+// For convenience, you may use dot notation to set object instance variables:
+myClass.count = 45;
+NSLog(@"%i", myClass.count); // prints => 45
// Methods
+/- (return type)methodSignature:(Parameter Type *)parameterName;
@@ -247,8 +320,9 @@ int main (int argc, const char * argv[])
@end
// Implement the methods in an implementation (MyClass.m) file:
-
-@implementation MyClass
+@implementation MyClass {
+ long count; // Private access instance variable.
+}
// Call when the object is releasing
- (void)dealloc