zoukankan      html  css  js  c++  java
  • 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成函数声明。

     

     

     

     

     

     

     

  • 相关阅读:
    Anaconda和Pycharm的安装和配置
    使用XAMPP集成开发环境安装Apache、PHP的配置说明
    新兴内存技术准备突围
    使嵌入式系统调试更容易:有用的硬件和软件提示
    保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事
    关键任务应用程序依赖于故障保护存储器
    模拟内存计算如何解决边缘人工智能推理的功耗挑战
    如何为嵌入式应用选择适当的SSD
    Imec推出高性能芯片的低成本冷却解决方案
    交换机应用寻找10个完美的因素
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/2681092.html
Copyright © 2011-2022 走看看