//
// main.m
// 局部变量和全局变量以及成员变量的区别 #import <Foundation/Foundation.h>
@interface Person : NSObject
{
// 写在类声明的大括号中的变量, 我们称之为 成员变量(属性, 实例变量)
// 成员变量只能通过对象来访问
// 注意: 成员变量不能离开类, 离开类之后就不是成员变量,成员变量不能在定义的同时进行初始化。
// 存储: 堆(当前对象对应的堆的存储空间中)
// 存储在堆中的数据, 不会被自动释放, 只能程序员手动释放
int age;
}
@end
@implementation Person
@end
// 写在函数和大括号外部的变量, 我们称之为全局变量
// 作用域: 从定义的那一行开始, 一直到文件末尾
// 局部变量可以先定义在初始化, 也可以定义的同时初始化
// 存储: 静态区
// 程序一启动就会分配存储空间, 直到程序结束才会释放
int a;
int b = ; int main(int argc, const char * argv[]) {
// 写在函数或者代码块中的变量, 我们称之为局部变量
// 作用域: 从定义的那一行开始, 一直到遇到大括号或者return
// 局部变量可以先定义再初始化, 也可以定义的同时初始化
// 存储 : 栈
// 存储在栈中的数据有一个特点, 离开作用域,系统会自动给我们释放
int num = ;
{
int value;
}
return ;
}
//
// main.m
// 函数和方法的去呗 #import <Foundation/Foundation.h>
/*
函数和方法的区别
1.函数属于整个文件, 方法属于某一个类,函数可以直接调用, 方法必须用对象或者类来调用
注意: 虽然函数属于整个文件(可以写在类的实现中), 但是如果把函数写在类的声明中会不识别。
3.不能把函数当做方法来调用, 也不能把方法当做函数来调用 方法的注意点:
>方法可以没有声明只有实现。
>方法可以只有声明没有实现, 编译不会报错, 但是运行会报错
如果方法只有声明没有实现, 那么运行时会报:
reason: '+[Person demo]: unrecognized selector sent to class 0x100001140'
发送了一个不能识别的消息, 在Person类中没有+开头的demo方法
reason: '-[Person test]: unrecognized selector sent to instance 0x100400000' 类也有一个注意点:
类可以只有实现没有声明,实现中加上 : NSObject,,
注意: 在开发中不建议这样写 */ //@interface Person : NSObject
//// 对象方法声明
//- (void)test;
//// 类方法声明
//+ (void)demo;
//
//@end @implementation Person : NSObject //不申明就要加上 : NSObject
// 对象方法实现
- (void)test
{
NSLog(@"test");
}
// 类方法实现
+ (void)demo
{
NSLog(@"demo");
} @end // 外部函数的声明
extern void sum();
// 内部函数的声明
static void minus();
// 外部函数
extern void sum()
{
printf("sum");
}
// 内部函数
static void minus()
{
printf("minus");
} int main(int argc, const char * argv[]) {
sum();
[Person demo];
demo();
[Person sum];
[Person demo];
Person *p = [Person new];
[p test]; return ;
}
//
// main.m
// 常见错误 #import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)test;
@end
@implementation Person
- (void)test
{
NSLog(@"test");
}
@end int main(int argc, const char * argv[]) { Person *p = [Person new];
[p test];
/*
// 1.只有类的声明,没有类的实现
// 2.漏了@end
// 3. @interface和@implementation嵌套
// 4.成员变量没有写在括号里面
// 5.方法的声明写在了大括号里面
// 6.成员变量不能在{}中进行初始化、不能被直接拿出去访问
// 7.方法不能当做函数一样调用
// 8.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间。也就是说OC方法不能独立于类存在
// 9.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有
// 10.C函数不能访问OC对象的成员
// 11.低级错误:方法有声明,但是实现的时候写成了函数
// 12.OC可以没有@interface同样可以定义一个类
// 13.static不能用在成员变量和方法上。
*/ return ;
}

oc08--局部变量,全局变量,函数方法的区别的更多相关文章

  1. static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

    答案:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别虽在于非静态全 ...

  2. C/C++定义全局变量/常量几种方法的区别

    在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...

  3. C++定义全局变量/常量几种方法的区别

    在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...

  4. 定义c/c++全局变量/常量几种方法的区别(转载)

    出自:http://www.cnblogs.com/yaozhongxiao/archive/2010/08/08/1795338.html 在讨论全局变量之前我们先要明白几个基本的概念:  1. 编 ...

  5. 定义c/c++全局变量/常量几种方法的区别

    转自:http://www.cnblogs.com/yaozhongxiao/archive/2010/08/08/1795338.html 1. 编译单元(模块): 在ide开发工具大行其道的今天, ...

  6. Static全局变量(函数)与普通的全局变量(函数)的区别

    转自:http://www.cnblogs.com/zjvskn/p/5548879.html Static全局变量与普通的全局变量有什么区别? 答: 全局变量(外部变量)的说明之前再冠以static ...

  7. Static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?

    Static全局变量与普通的全局变量有什么区别? 答: 全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式. 这两者 ...

  8. Python之路Python全局变量与局部变量、函数多层嵌套、函数递归

    Python之路Python全局变量与局部变量.函数多层嵌套.函数递归 一.局部变量与全局变量 1.在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量.全局变量作用域是整个程序,局 ...

  9. 李洪强iOS开发之OC[017]函数和方法的区别

    // //  main.m //  15 - 函数和对象的方法的区别 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. ...

随机推荐

  1. Beta冲刺-星期五

    这个作业属于哪个课程  <课程的链接>            这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 完成项目最后的冲刺 ...

  2. Metric Learning度量学习:**矩阵学习和图学习

    DML学习原文链接:http://blog.csdn.net/lzt1983/article/details/7884553 一篇metric learning(DML)的综述文章,对DML的意义.方 ...

  3. (转)C#开发微信门户及应用(6)--微信门户菜单的管理操作

    http://www.cnblogs.com/wuhuacong/p/3701961.html 前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的 ...

  4. 微信jssdk图片上传

    一.html页面如下: <div class="weui-cell"> <div class="weui-cell__hd"></ ...

  5. PHP第四天 函数引用传值

    <?php function f1($p1,&$p2){ $p1++; $p2++; $result= $p1+ $p2; return $result;}$v1=10;$v2=20;$ ...

  6. Java8新特性-接口中的静态方法与默认方法

    今天上午在读<Effective Java>时,有这样一句话:”接口中“不能有静态方法,于是联想起面试时老是被问接口相关的东西,决定总结一下,谁知道这一总结,就发现了自己知识的一大漏洞.  ...

  7. BZOJ [Poi2000]病毒 AC自动机_DFS_细节

    Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...

  8. 【转载】VMware完全卸载

    出现安装时出现vmwareworkstationxxx.msi failed问题是官方解决方案...真心详细. http://kb.vmware.com/selfservice/microsites/ ...

  9. eas之数据融合

    1.如何进行自由融合自由融合无须指定区域,KDTable将根据指定的融合模式,融合相邻且值相等的单元.// 自由行融合table.getMergeManager().setMergeMode(KDTM ...

  10. 被遗忘的 Logrotate

    转自: http://huoding.com/2013/04/21/246 被遗忘的 Logrotate 发表于 2013-04-21 我发现很多人的服务器上都运行着一些诸如每天切分 Nginx 日志 ...