ObjectiveC——基础

 


变量:

语法:

type  name    

int  highScore;

type  name    value

int  highScore   = 100;

 

1 int minutes = 602 int hour = 24;
3 int dyas = 365;
4 int minutesInAYear = minutes * hours * days;

注:ObjectC还有Dynamic Typing变量

 

变量类型:

int 

int highScore;        unsugned int highScore;    long int highScore;

(-2.1billion ~ 2.1billion)       (0 ~ 4.3billion)   如果Compile 32-bit,范围同一般的highScore如果compile 64-bit的范围是8bytes

 

 

short int smallScroe

-32,767 ~ +32,767

 

注:int highScore  永远都是4bytes(hold 4 bytes or 32 bits
long long int highScore  永远都是8bytes

float/double

 type      name   value

 float     myFloat     = 7.2f;  (4 bytes)   加f结尾是因为写任何带小数的值,如果不加f结尾默认是double型

double  myDouble  = 7.2;   (8 bytes)


ex:

 

View Code
 1 int main(int argc, const char * argv[])
 2 {
 3 
 4     @autoreleasepool {
 5     
 6         // insert code here...
 7         float myFloat = 7.2f;
 8         double myDouble = 7.2;
 9         NSLog(@"The value of myFloat is %f", myFloat);
10         //%f for decimal representation default will output 6 places -> 7.200000
11         NSLog(@"The value of myFloat is %e", myFloat);
12         //%e for exponential notation -> 7.200000e+00
13         NSLog(@"The value of myDouble is %f", myDouble);
14         //%f for decimal representation default will output 6 places -> 7.200000
15         
16     }
17     return 0;
18 }

 

Cast:

View Code
int a = 25;
        int b = 2;
        float result = a/b;
        NSLog(@"The result is %f", result);
  //当int和float混用的时候,结果为12.000000,会舍去小数点后面的数值
        
        int a = 25;
        int b = 2;
        float result = (float)a/b;
        NSLog(@"The result is %f", result);
        //我们需要用Cast,结果为12.500000

char  

can hold more than one character(one byte)

char myChar = 'b',  

NSlog(@"The char is %c", myChar);

//这些也符合注意7这里是char不是数值 'i'  '7'

 

BOOL


BOOL isCompleted = YES;  

//not bool, but BOOL

//not true or false, but YES or NO

NSlog(@"The char is %i", isCompleted);

//use %i output BOOL

//YES == 1, NO == 0

NSString

objectiveC增加的类型,他的位置在#import <Foundation/Foundation.h>这里,如下图。

 

语法如下:

 

   type pointer name      value

  NSString       message     = @"Hello";

这里实际是创建一个object message,message 指向一个NSString的一块内存, 内存里存储的是“@Hello”,message指向这块内存

注意:在objectiveC里只要创建object前面就要加指向对象的指针

 

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 
 4 int main(int argc, const char * argv[])
 5 {
 6     @autoreleasepool {
 7     
 8         // insert code here...
 9         NSString * message = @"Hello";  //变量message is a pointer to NSString
10         
11         NSString * message;
12         message = @"Hello"; //分开写是这样
13         
14         NSLog(@"The value of message is %@", message);
15         //%@ is placeholder of objects
16         //the string is objects
17     }
18     return 0;
19 }

 

 

 Variable Scope

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 
 4 int main(int argc, const char * argv[])
 5 {
 6 
 7     @autoreleasepool {
 8     
 9         // insert code here...
10         for(int i = 0; i<10; i++){
11             int foo = 55;
12             NSLog(@"The value of foo is %i", foo);
13         }
14         
15         NSLog(@"The last value of foo was &i", foo);
16         //Use of undeclared identifier 'foo',foo只存在于for循环里
17         
18     }
19     return 0;
20 }

 

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 int main(int argc, const char * argv[])
 4 {
 5 
 6     @autoreleasepool {
 7         
 8         int x = 10;
 9         
10         // insert code here...
11         for(int i = 0; i<10; i++){
12             int foo = 55;
13             x++;    //可以访问x
14             NSLog(@"The value of foo is %i", foo);
15         }
16         
17         NSLog(@"The last value of x was %i", x);
18         //可以访问x
19         
20     }
21     return 0;
22 }
View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 void myFunction(int someValue){
 4     someValue = someValue + 10;
 5     //Change the copy of foo not foo
 6     NSLog(@"The value passed in was %i", someValue);
 7 }
 8 
 9 int main(int argc, const char * argv[])
10 {
11 
12     @autoreleasepool {
13         
14         // insert code here...
15         for(int i = 0; i<10; i++){
16             int foo = 55;
17             
18             myFunction(foo);
19             //Can call myFunction.
20             //Pass in the copy of foo not foo itself
21             
22             NSLog(@"The value of foo is %i", foo);
23         }
24     }
25     return 0;
26 }

Gloable Variable:

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 int bar = 10;
 4 
 5 void myFunction(int someValue){
 6     bar++;  //Globle bar, can call anywhere
 7     NSLog(@"The value passed in was %i", someValue);
 8 }
 9 
10 int main(int argc, const char * argv[])
11 {
12 
13     @autoreleasepool {
14         
15         // insert code here...
16         for(int i = 0; i<10; i++){
17             int foo = 55;
18             bar++;  //Globle bar, can call anywhere
19             myFunction(foo);
20             NSLog(@"The value of foo is %i", foo);
21         }
22     }
23     return 0;
24 }
View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 int main(int argc, const char * argv[])
 4 {
 5     int foo = 10;
 6     //int foo = 11; can not redefine the vaiable
 7     @autoreleasepool {
 8         
 9         // insert code here...
10         for(int i = 0; i<10; i++){
11             int foo = 55;   //can redefine the variable
12             NSLog(@"The value of foo is %i", foo);  //Closest foo win
13         }
14         NSLog(@"The value of foo is %i", foo);  //Closest foo win
15 
16     }
17     return 0;
18 }

Enumerations

 

View Code
 1 int main(int argc, const char * argv[])
 2 {
 3     //int foo = 11; not create because re-write the same scope variable
 4     @autoreleasepool {
 5     // insert code here...
 6     enum seatPreference {
 7         window = 99,
 8         aisle = 199,
 9         middle = 399
10     };
11         enum seatPreference bobSeatPreference = aisle;
12         enum seatPreference shawnPreference = window;
13         
14         if(shawnPreference == window){
15             //do something
16         }
17         
18         NSLog(@"bob wants %i", bobSeatPreference);
19     }
20     return 0;
21 }

 typedef

 

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 typedef enum {window = 99, aisle = 199, middle = 399} seatPreference;
 4 //define a new type seatPreference 调用seatPreference前面不用加enum
 5 
 6 int main(int argc, const char * argv[])
 7 {
 8     //int foo = 11; not create because re-write the same scope variable
 9     @autoreleasepool {
10     // insert code here...
11     seatPreference bobSeatPreference = aisle;
12     seatPreference shawnPreference = window;
13     
14     if(shawnPreference == window){
15         //do something
16     }
17     
18     NSLog(@"bob wants %i", bobSeatPreference);
19     }
20     return 0;
21 }

 

Preprocessor directives

 

View Code
 1 #import <Foundation/Foundation.h>
 2 //preprocessor directive: mean it causes something
 3 //simple to happen before our code compiled
 4 //程序compile之前,copy Foundation.h and whatever it includes 替换#这行,
 5 //等于加载了另外一个程序的语句
 6 
 7 #define PI 3.141596 //define macro
 8 
 9 int main(int argc, const char * argv[])
10 {
11     @autoreleasepool {
12     
13         // insert code here...
14         int a = PI + 500;
15         
16         NSLog(@"%i", a);    //同#import这里直接吧PI的值copy过来替换
17         a++;
18         NSLog(@"The max value of pre-defined macro of INT-32bit is %i", INT32_MAX);
19     }
20 #if DEBUG
21         NSLog(@"I am from Debug Mode"); //Before compile xcode检查如果是DEBUG Mode则留着这行做compile,如果不是则在compile时删除这行
22 #endif
23     
24     return 0;
25 }

 

 


输出:用来输出道Console,可以用来做Debug

 

1 NSLog(@"There are %i minutes in a year.", minutesInAYear);

 

因为ObjectC从C发展而来,那时还没有String类型,所以要在“”前面加上@,代表这是ObjectC定义的。记住,需要“something”的时候前面要加@

一些程序语言我们会写: “There are” + minutes + “in a year.”  

ObjectiveC:我们先写成 @“There are      in a year.”  中间加入place holder:%i变成 @“There are  %i  in a year.”  placeholder(i)前面要有@,告诉ObjectiveC什么类型的数据要放在这里。接下来加上需要和placeholder换的数据。@“There are  %i  in a year.” minutesInAYear

ex:

 

@"There are  in a  day year.", minutes, days

 

注:%i  integer

  %f  floating-point

  %c  single characters


Condition Code:

 

View Code
 1 if( a >90){
 2     //code goes here
 3     //....
 4 }
 5 
 6 if(b<80){
 7   //code goes here
 8   //....
 9 }
10 
11 if(c == 90){
12   //code goes here
13   //....    
14 }
15 
16 if(c != 100){
17   //code goes here
18   //....    
19 }

ex:

View Code
 1 int category = 47;
 2         if(category ==40){
 3             //do one things
 4         }
 5         else{
 6             if(category == 41){
 7                 //do one things
 8             }else{
 9                 if(category == 42){
10                     //do one things
11                 }else{
12                     //etc...
13                 }
14             }
15         }
16     }

 


Condition Code:

上面的写法太繁琐,换成switch语句

View Code
 1 //create a variable
 2 int category = 42;
 3 
 4 switch(category){
 5     case 40:
 6          NSLog(@"It's a category 40");    
 7          break;
 8     case 41:
 9          NSLog(@"It's a category 41");    
10          break;
11     case 42:
12          NSLog(@"It's a category 42");    
13     case 43:
14     case 44:
15          NSLog(@"It's a category 43, or 44");    
16          break;
17     default:
18          NSlog(@"I don't know what it was!");
19          break;  
20 }

因为category=42,进入第19句输出42,后因为没有break,继续执行22句。

注:case 43, case 44任何一个进入都执行22句。

  没有break就继续执行下面的语句。


Operator:

+: Addision

-: Substraction

*: Multiplication

/: Division:  注: int year = 2003;   reminder = year/4  //reminder = 500

=: Assignment

+=,-=,*=,/=

Comparision:

 

if (a == b)    {...
if (a != b)    {...
if (a > b)    {...
if (a < b)    {...
if (a >= b)    {...
if (a <= b)    {...

 

Logical And/Or:

 

if (a == b && c == d)    {...
if (a == b || c == d)    {...
if (
     (a > b)
         &&
     (c < d)    )     {...

 

Modulus:

 

int Year = 2003;
int remainder = Year % 4;    //remainder is 3

 

Increment/Decrement:

 

a = a + 1;        a = a - 1;
a += 1;            a -= 1;
a++;                ++a;
a--;                   --a;

 

上面结果都一样。 这里++a和a++都是a+1,没有区别。

最好执行++a,a++在自己的语句中,这样就没有区别。如果和别的语句混搭(if statement or NSlog statement),会不一样。

Prefix/Postfix:

prefix的例子:

View Code
1 int a =5;
2 NSlog(@"The value of a is %i", ++a);
3 //首先a在内存中是5, ++a在NSlog之前做,a此时为6,执行NSlog

postfix的例子:

View Code
int a = 5;
NSlog(@'The vlaue of a is %i", a++);
//对于postfix:先excute NSlog语句,当语句执行完后才a+1

 Ternary Operation:

相当于小型的if statement

ex:

 

int player1;
int player2;
...
...
//sometimes later
int highScore;

if(player1>player2){
        highScore = player1;
}
    else{
        highScore = player2
}

 

用Ternary Operation可以缩减为一句话

condition ? true : false

int player1;
int player2;

int highScroe = (player1  player2) ? player1 : player2; 

Loop:

while do:

 

View Code
1 int a = 0;
2 while(a<10){
3     NSlog(@"The value of a is %i", a);
    a++;
4 }

 

do while:

View Code
1 int a = 0;
2 do{
3     NSlog(@"The Value is %i", a);
4     a++;
5 } while(a<10)

一般对于while do语句我们常用的变体是for loop:

View Code
1 for(int i = 0; i<10; i++){
2     NSlog(@"The vaule of a is %i", a);
3 }

 

Break/Continue:

View Code
1 for( int i = 1; i < 5000; i++){
2     if(i % 5 ==0){
3         continue;
4     }
5     NSlog(@"The vaule of the index is %i", i);
6 }    //当其中那次循环是5的倍数则返回到Top 继续做判断

 

View Code

 


Break/Continue:

 

语法:

int myFuntion(int x, int y)     void  myFuntion(int x, int y)      void  myFuntion()   

{                    {                    {

  ....                  ....                    ...

  return x + y;                  //void不需要return关键字        //parameter可以为空

}                    }                    }

注:函数名用carmel case写法

ex: main主函数会自动被程序调用,其他函数需要先定义后自己调用

 

View Code
 1 #import <Foundation/Foundation.h>
 2 void myFunction(){
 3     for(int i =0; i<5000; i++){
 4         if(i % 5 ==0){
 5             continue;   //jump back to the top loop -> i<5000
 6         }
 7         NSLog(@"The value of the index is %i", i);
 8     }
 9 }
10 
11 int main(int argc, const char * argv[])
12 {
13 
14     @autoreleasepool {
15     
16         // insert code here...
17         myFunction();
18     }
19     return 0;
20 }

 

View Code
 1 #import <Foundation/Foundation.h>
 2 
 3 void myFunction();
 4 int main(int argc, const char * argv[])
 5 {
 6 
 7     @autoreleasepool {
 8     
 9         // insert code here...
10         myFunction();
11     }
12     return 0;
13 }
14 void myFunction(){
15     for(int i =0; i<5000; i++){
16         if(i % 5 ==0){
17             continue;   //jump back to the top loop -> i<5000
18         }
19         NSLog(@"The value of the index is %i", i);
20     }
21 }

 

注意:myFunction()的定义需要在调用之前写,如果放在函数调用后面会出错。如果非要保持在后面,需要在上面加void function()

   可以选择一块区域,右击选择extract,Xcode会为我们选择的语句自动extract成函数声明。

 

 

 

 

 

 

 

 

 

posted @ 2012-09-12 05:35  若愚Shawn  阅读(362)  评论(0编辑  收藏  举报