有没有灌篮高手照片能帮我把照片两张亲到一起吗?

主题 : 为什么NSString*前面用static而不是const?
级别: 侠客
可可豆: 2230 CB
威望: 2230 点
在线时间: 597(时)
发自: Web Page
为什么NSString*前面用static而不是const?&&&
看到很多官方例子中,在文件头定义的NSString*前面都加了static,想知道这么做的原因是什么?Obj-C中static的用法应当和C++中一样吧?static NSString* string = @&aString&;
雨雪霏霏 - iPhone博客
级别: 精灵王
可可豆: 7948 CB
威望: 7895 点
在线时间: 563(时)
发自: Web Page
用法一样,头文件中定义的话,static静态全局变量,const全局常量,根据需要设置吧
级别: 精灵王
可可豆: 4360 CB
威望: 4317 点
在线时间: 800(时)
发自: Web Page
static 可以改的, const 是常量,不可以改的
级别: 侠客
可可豆: 2230 CB
威望: 2230 点
在线时间: 597(时)
发自: Web Page
这么说来,如果是一个不希望改变的字符串,就应当定义为const型;如果是一个可能在多个文件中出现并发生命名冲突的字符串,就应当定义为static型;如果是将要在别的文件中使用的字符串,就不要加static。这样对吗?多谢!
雨雪霏霏 - iPhone博客
级别: 侠客
可可豆: 511 CB
威望: 511 点
在线时间: 431(时)
发自: Web Page
lz你说的是定义在.h的@interface a:ababa{static NSString* string = @&aString&;}这个样子我试了,编译器说Expected specifier-qualifier-list before &static&,报错。搁在花括号外面说是定义了没有使用。还是在.m文件的任何方法之外,比如#import &a.h&static NSString* string = @&aString&;@implementation 。。。。。。。还有@interface a:ababa{@private      NSString* string = @&aString&;}和上面用static不是一会事儿吧咱们好像遇到一个疑惑了。请过路的神仙给解答一下吧。[ 此帖被shuifengxi在 16:04重新编辑 ]
级别: 侠客
可可豆: 2230 CB
威望: 2230 点
在线时间: 597(时)
发自: Web Page
引用 引用第4楼shuifengxi于 15:57发表的  :lz你说的是定义在.h的@interface a:ababa{static NSString* string = @&aString&;....... 我测了一下你说的定义在.h文件中定义静态字符串,然后在.m文件中调用。编译器会警告说变量没有使用(大概是因为字符串的作用域在文件内),但在.m文件中可以使用——这一点让我很不解。另外,直接在.m文件中@interface之前定义静态全局变量可以使用。[ 此帖被lichen1-09-29 22:53重新编辑 ]
雨雪霏霏 - iPhone博客
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版编程语言(10)
首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下:class Test{
const PATH = 'c/';//修饰常量
const function test(){//这种方法是错误的,const无法修饰方法
const在使用的时候不需要添加权限修饰字段,但是在调用const修饰的常量时是需要技巧的,因为常量是属于整个类的,而不是属于某个对象,所以在调用的时候需要使用类名加域名修饰符,例:
echo Test::PATH;
//也可以使用下面的方法调用
$test = new Test();
$test::PATH;但是在类内部调用的时候就会出现问题,如何在类内部获取当前类名或者当前对象名(php可以根据对象获取类名-反射),php中给我们提供了两个特殊的关键字,如:
class Test{
const PATH = 'c/';//修饰常量
public function ass(){
echo $this::PATH.'&br /&';
echo self::PATH.'&br /&';
}其中self(不加$)代表当前类名,$this代表当前对象。这样,我们就可以在类内部调用const修饰的常量了。
接下来我们说说static&
const虽然很好用,但是一经定义就无法修改值了,但是有的时候我们需要一个属于类的属性,但是又可以修改其值,比如统计此类构造了几个对象,这个时候就是使用static的时候了,在static修饰类的成员变量的时候,它的使用方法基本与const一样,区别就在于static修饰的属性可以添加权限(7.1的php中const也可以添加,以前的不能),并且static修饰的成员变量的值是可以修改的。
但是当static修饰成员方法的时候,使用方法有一点改变,在类的内部,static修饰的方法体内部,无法访问当前类的任何普通成员变量,准确的来说是无法使用关键字$this,只可以使用当前类的静态成员变量,和类常量。class Test{
static public $name='asd';
const π = 3.1415926;
public $age = 10;
public static function lenth($r){
//echo $this-&//会发生错误,不能访问普通的成员变量
echo Test::$
return $r*2*self::π;
public static function area($r){
return $r*$r*self::π;
在使用static的过程中,调用的方法与调用static修饰的变量不同,既可以通过类名调用,也可以通过对象名调用,比如:echo '周长:'. Test::lenth(1).'&br/&';
echo '面积:'.Test::area(1).'&br/&';
$per = new Test();
echo $per-&lenth(3);
以上这两种调用方式都是合法的。
因为遇到了问题,所以在下就研究了一下,将测试成果分享一下,有不对的望请指出!
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:99094次
积分:2951
积分:2951
排名:第10753名
原创:198篇
评论:55条
(4)(3)(3)(1)(8)(7)(19)(1)(6)(19)(23)(25)(4)(29)(28)(19)您所在的位置: &
建议6: 区别readonly和const的使用方法
建议6: 区别readonly和const的使用方法
机械工业出版社
《编写高质量代码:改善C#程序的157个建议》第1章基本语言要素,本章的内容将以这些最基础的要素开篇,给出C#编码中的一些最佳实践,让我们在C#进阶学习的过程中始终朝着正确的方向前进。本节为大家介绍建议6: 区别readonly和const的使用方法。
建议6: 区别readonly和const的使用方法
很多初学者分不清readonly和const的使用场合。在我看来,要使用const的理由只有一个,那就是效率。但是,在大部分应用情况下,“效率”并没有那么高的地位,所以我更愿意采用readonly,因为readonly赋予代码更多的灵活性。const和readonly的本质区别如下:
const是一个编译期常量,readonly是一个运行时常量。
const只能修饰基元类型、枚举类型或字符串类型,readonly没有限制。
关于第一个区别,因为const是编译期常量,所以它天然就是static的,不能手动再为const增加一个static修饰符,下面的代码将会导致编译通不过:static&const&int&ConstValue&=&100;&//常量“ConstValue”不能标记为&static&
而之所以说const变量的效率高,是因为经过编译器编译后,我们在代码中引用const变量的地方会用const变量所对应的实际值来代替,如:Console.WriteLine(ConstValue);&
和下面的代码生成的IL代码是一致的:Console.WriteLine(100);&
readonly变量是运行时变量,其赋值行为发生在运行时。readonly的全部意义在于,它在运行时第一次被赋值后将不可以改变。当然,“不可以改变”分为两层意思:
1)对于值类型变量,值本身不可改变(readonly,只读)。
2)对于引用类型变量,引用本身(相当于指针)不可改变。
来看值类型变量,查看如下代码:class&Sample &{ &&&&&public&readonly&int&ReadOnlyValue&; &&&&&&public&Sample(&int&value) &&&&&{ &&&&&&&&&ReadOnlyValue&=&value; &&&&&} &}&
Sample的实例ReadOnlyValue在构造方法中被赋值后就不可以改变,下面的代码将不会编译通过:Sample&sample&=&new&Sample(200); &sample.ReadOnlyValue&=&300;&&&&&&&&&//无法对只读的字 &//段赋值(构造函数或变量初始值指定项中除外)&
针对引用类型变量,查看如下代码:class&Sample2 &{ &&&&&public&readonly&Student&ReadOnlyV &&&&&&public&Sample2(Student&value) &&&&&{ &&&&&&&&&ReadOnlyValue&=&value; &&&&&} &}&
Sample2的ReadOnlyValue是一个引用类型变量,赋值后,变量不能再指向任何其他的Student实例,所以,下面的代码将不会编译通过:Sample2&sample2&=&new&Sample2(new&Student()&{&Age&=&10&}); &sample2.ReadOnlyValue&=&new&Student()&{&Age&=&20&}; &&&&&//无法对只读的字段赋值(构造函数或变量初始值指定项中除外)&
但是,我们之前已经提到过了,引用本身不可改变,引用所指的实例的值,却是可以改变的,下面的代码将会被允许: Sample2&sample2&=&new&Sample2(new&Student()&{&Age&=&10&}); &sample2.ReadOnlyValue.Age&=&20;&
readonly所代表的运行时含义有一个重要的作用,就是可以为每个类的实例指定一个readonly的变量。以Sample这个类为例,可以在运行时生成多个实例,而同时,又可以为每个实例生成自己的readonly变量,如下:Sample&sample1&=&new&Sample(100); &Sample&sample2&=&new&Sample(200); &Sample&sample3&=&new&Sample(300);&
这就是readonly变量所代表的运行时含义,也正是readonly变量的灵活之处。
注意 有人说,readonly变量不能被重新赋值是不正确的。下面的代码表明了它可以被改变:class&Program &{ &&&&&static&void&Main(string[]&args) &&&&&{ &&&&&&&&&Sample&sample&=&new&Sample(200); &&&&&&&&&Console.WriteLine(sample.ReadOnlyValue); &&&&&} &} &&class&Sample &{ &&&&&public&readonly&int&ReadOnlyValue&=&100; &&&&&&public&Sample(int&value) &&&&&{ &&&&&&&&&ReadOnlyValue&=&value; &&&&&} &}&
ReadOnlyValue首先在初始值指定项(也称为初始化器)中被赋值为100,后来,在构造方法中又被赋值为200。实际上,应该把初始化器理解成构造方法的一部分,它其实是一个语法糖。在构造方法内,我们确实可以多次对readonly赋值。
【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
九型人格是地球上最古老的人类发展体系,是一种深层次了解人的方
网友评论TOP5
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
UIKit框架是iPhone应用程序开发中最基本的框架,也是
细节决定成败,思路清晰、言简意赅的代码让程序员一目
随着手机、MP3播放器、汽车和数码相机的功能越来越高
本书结合大量的典型实例,详细介绍了用Java来编写网络应用程序的技术。本书的范例都基于最新的JDK 1.5版本,书中内容包括:Java
51CTO旗下网站

我要回帖

更多关于 灌篮高手铁路口 照片 的文章

 

随机推荐