卷积编码c语言实现如何读写unicode编码的文本文件

c 读取文本 unicode
转载自:.cn/s/blog_00tasi.html
/zch11230/blog/item/125ddc8bba61fe15c8fc7aa2.html
批处理读取文本中的每一行
我需要的是要读取每一条的第一列信息,如下格式
1 //编写一个程序,从标准输入一行一行地读取文本,如果相邻出现重复内容,则打印出其中一行,其余的不打印 2 #include &stdio.h& 3 #include &stdlib.h& 4 #include &string.h& 5 int main() 6 { 7 char str1[128]; 8 char str2[128]; ...
*&* *& Report ZTEST_CWBK *& *&* *& *& *&* REPORT ztest_cwbk. CONSTANTS: line_length TYPE i VALUE 100. DATA: ok_code LIKE sy-ucomm. DATA: * Create reference to t ...
工作中需要判断某个文本中的URL是否能正常访问,并且随机获取其中N行能正常访问的URL数据,我的思路是:读取文本每一行数据,用urlopen访问,将返回状态码为200的URL保存到一个列表,获得列表长度,使用random产生一个随机值作为列表下标,获取该行数据.具体实现如下: 1 import urllib2,random 2 from sets import Set 3
用ATL操控word读取文本内容. 这是一个非常简单而且实用的功能,区区简单地封装成两个函数: extern wstring wstring_from_word(const wstring &);extern string string_from_word(const string&);
#ifndef WordReader_h__ #define
如果该物理路径没有该文本则创建一个新文本 if (!File.Exists(@&C:\db.txt&)){FileStream fs = new FileStream(@&C:\db.txt&, FileMode.Create);fs.Close();} //读取文本,遍历文本 StreamReader sr = new Stre ...
相关文章 C++文件读写操作(一)将字母表写入TXT文本文件
C++文件读写操作(二)逐字符读取文本和逐行读取文本
C++文件读写操作(三)如何统计文本的行数及如何读取文件某一行内容
C++文件读写操作(四)读取文件数据到临时数组
#include &iostream& #include &fstream& using namespac ...
作者:朱金灿来源:http://blog.csdn.net/clever101我们通常把数据存诸在txt文件上,但是我们通常要把这些数据取出来并进行处理.下面我将介绍一种在VC++应用程序中读取文本数据的方法.一.前言因为经常要处理地质方面的数据.但是很多数据它不是直接存贮在数据库文件(如二.程序原理首先我们知道假如要进行的文件操作只是简单的读写整行的字符串,那么最好使用C ...
题意描述: 连续输入字符串,找出其中最长的字符串思路:
分三个步骤: 读取文本字符串
筛选最长字符串 打印输出
考察字符串知识
'0'是字符串结束标志,但是不算做字符串长度,
getchar() 读取字符
#include&stdio.h& #define MAXLINE 10000 int main(){ int
VC编程读取文本数据
我们通常把数据存诸在txt文件上,但是我们通常要把这些数据取出来并进行处理.下面我将介绍一种在VC++应用程序中读取文本数据的方法. 一.前言 因为经常要处理地质方面的数据.但是很多数据它不是直接存贮在数据库文件(如Access文件等),而是存贮在txt文件.经常有同学问我怎么通过编程读取实现文本文件中的数据.其实存贮在txt文件也有它 ...
服务器: 1package serverAndC 2 3import java.io.BufferedR 4import java.io.F 5import java.io.FileInputS 6import java.io.IOE 7import java.io.InputS 8import ja ...
引入using System.IO 读取文本------
// 从应用程序所在的当前目录开始
openFileDialog1.InitialDirectory = System.IO.Directory.GetCurrentDirectory();
openFileDialog1.Filter = &quot ...
原文本的内容如下的: 中间有一个空行的,我们读取文本的时候一般是一行一行地读取,所以当读取到空行的时候,我们要处理判断,要加换行符. c++ builder的处理方式的是这样的: TStringList *buff
= new TStringList(); buff-&LoadFromFile(&H:\\test\\remark.txt&); A ...
逐行写入文本 public class TestFileWriter {
public static void main(String[] args) {
FileWriter fw =
fw = new FileWriter(&d://test.txt&,true) ...
很多朋友都希望读取txt文本这个功能, 请教了工程师大大,才了解到,本版手机按键已经有了插件读取文本的功能.
在按键的plugin目录下有一个file.lua就是文件操作插件,内有帮助文档,同学们可以参考
比如读取附件里的qq.txt,代码如下 PutAttachment &/sdcard&, &qq.txt&q ...
//利用InputStream 属性直接从HttpPostedFile对象读取文本内容 System.IO.Stream MyS int FileL FileLen = file.ContentL // 读取文件的 byte[] byte[] bytes = new byte[FileLen]; MyStream = file.InputStr ...
当MFC项目采用Unicode时,CStdioFile.ReadString读取到数据都是Unicode编码的,必须进行转换,不然就是乱码 // 字节数据转换成Unicode编码 int CharToUnicode(char *pchIn, CString *pstrOut){ int nL WCHAR *
if(pchIn == NULL) {
/zch11230/blog/item/125ddc8bba61fe15c8fc7aa2.html 在SharePoint迁移中,要同步新旧用户SID,但是用户太多,所以决定用批处理一行行读取导出的User.txt(每一行是一条用户信息),再针对每一条用户记录进行操作. 于是学习参考了上面大侠的一些知识.主要用到的是/f命 ...
读取UTF-8: import java.io.ByteArrayOutputS import java.io.DataOutputS import java.io.InputS public class Utf8ReadLines { private int sentents,//读取的行数 pr ...
今天通过C#来实现一个读取Image上文本的功能. 1. 环境准备: 1). 下载 Microsoft Office SharePoint Designer 2007. 2). 安装请参考KB:/kb/982760. 只需要安装Office Tools下Microsoft Office Document Imagin ...<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&当前位置:&&
本页文章导读:
&&&&?字符编码札记:ASCII,Unicode和UTF-8 &&&&&& 字符编码笔记:ASCII,Unicode和UTF-8
今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清......&&&&? Object-C学习札记 基础部分(一)NSString常用方法 &&&&&& Object-C学习笔记 基础部分(一)NSString常用方法
个人学习笔记NSString--实例化方法--------------NSString *str = [[NSString alloc] init];NSString *str = [[[NSString alloc] init] autorelease];
注意:在NSString 中存在......&&&&? objective-c中的属性引见&&&&&& objective-c中的属性介绍
我们知道在Objective-C中,使用@property配合@synthesize可以让编译器自动实现getter/setter方法,使用的时候也很方便,可以直接使用对象.属性的方法调用。NSString*N......
&&&&&&最新IT科技资讯推荐:
[1]字符编码札记:ASCII,Unicode和UTF-8
&&&&来源:&互联网& 发布时间:&
字符编码笔记:ASCII,Unicode和UTF-8
今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制),大写的字母A是65(二进制)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。2、非ASCII编码英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (?),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。3.Unicode正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表。 4. Unicode的问题需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。它们造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。5.UTF-8互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则很简单,只有二条:1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。2)对于n字节的符号(n&1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。下表总结了编码规则,字母x表示可用编码的位。Unicode符号范围 | UTF-8编码方式(十六进制) | (二进制)--------------------+---------------------------------------------00 007F | 0xxxxxxx00 07FF | 110xxxxx 10xxxxxx00 FFFF | 1110xxxx 10xxxxxx 10xxxxxx10 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx下面,还是以汉字“严”为例,演示如何实现UTF-8编码。已知“严”的unicode是4E25(101),根据上表,可以发现4E25处在第三行的范围内(00 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,“严”的UTF-8编码是“01”,转换成十六进制就是E4B8A5。6. Unicode与UTF-8之间的转换通过上一节的例子,可以看到“严”的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击“文件”菜单中的“另存为”命令,会跳出一个对话框,在最底部有一个“编码”的下拉条。里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。4)UTF-8编码,也就是上一节谈到的编码方法。选择完”编码方式“后,点击”保存“按钮,文件的编码方式就立刻转换好了。7. Little endian和Big endian上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字”严“为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。因此,第一个字节在前,就是”大头方式“(Big endian),第二个字节在前就是”小头方式“(Little endian)。那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。8. 实例下面,举一个实例。打开”记事本“程序Notepad.exe,新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。
[2] Object-C学习札记 基础部分(一)NSString常用方法
&&&&来源:&互联网& 发布时间:&
Object-C学习笔记 基础部分(一)NSString常用方法
个人学习笔记NSString--实例化方法--------------NSString *str = [[NSString alloc] init];NSString *str = [[[NSString alloc] init] autorelease];
注意:在NSString 中存在自己的实例化和初始化的方法 例如:NSString *str1 = [NSString stringWithCString:"new String" enconding: NSACIIStringEncoding];NSString *str2 = [NSString alloc] initWithCString:"new String" enconding: NSACIIStringEncoding];str1和str2两个对象是相同的。--NSStringEncoding 中常用的字符编码----------------
NSASCIIStringEncoding
NSUTF8StringEncoding
NSUnicodeStringEncoding--NSString创建实例----------------带“@”符号的方法只能定义含有英文和数字的NSString实例,例如:NSString *str = "Hello money~";--生成含有中文的NSString方法-------------//此方法自动释放内存+ (id)stringWithCString:(const char*)cString encoding:(NSStringEncoding)//进行alloc后进行初始化- (id)initWithCString:(const char*)cString encoding:(NSStringEncoding)例如:NSString *string = [NSString stringWithCString:"您好" encoding:NSUTF8StringEncoding];NSString *string = [[NSString alloc] initWithCString:"您好" encoding:NSUTF8StringEncoding];--使用格式创建字符串-------------+ (id)stringWithFormat:(NSString *)format...- (id)initWithFormat:(NSString *)format...例如:NSString *str = "hello";NSString *string = [NSString stringWithFormat:@"%@ world",str];NSLog(string); 结果:hello world--常用的替换符--------------%@ NSString实例%d,%D,%i 整数%u,%U 无符号整数%x 将无符号整数以十六进制小写字母显示%X 将无符号整数以十六进制大写字母显示%f 小数%c 字符%s C语言字符串%% 显示%字符本身--------------------------NSRange--NSRange的定义typedef struct _NSRange{
}NSRNSMakeRange函数--这个函数比较特殊 返回一个NSRange的对象。NSMakeRanger(unsigned int location,unsigned int length);例如:NSRange range = NSMakeRanger(0,5);NSLog(@"location is %d,length is %d",range.location,range.length);---------------------------计算字符串长度- (unsigned int)---------------------------字符串连接,插入和删除1、连接- (NSString *)stringByAppendingString:(NSString *)- (NSString *)stringByAppendingFormat:(NSString *)format...;例如:
NSString *str1 = @"hello";
NSString *str2 = @"world";
NSString *str3 = [str1 stringByAppendingString:str2];
NSString *str4 = [str2 stringByAppendingFormat:@"%d...%d",10,20];
str4 --& world 10...20
-----------------
NSMutableString的生成
//生成空字符串的实例
+ (id)stringWithString:(NSString *)
//带自动释放内存
- (id)initWithString:(NSString *)
NSMutableString *string = [NSMutableString stringWithString:@"hello"];2、追加字符串
NSMutableString
+ (void)appendString:(NSString *)
- (void)appendFormat:(NSString *)format...;
NSMutableString string = [NSMutableString string];
[string appendString:@"hello"];
[string appendString:@"money"];
[string appendString:@" and world"];3、插入字符串
NSMutableString
+ (void)insertString:(NSString *)string atIndex:(unsigned)
从index位置插入字符串
NSMutableString *string = [NSMutableString stringWithString:@"Mac X"];
[string insertString:@"OS" atIndex:4];
string --& Mac OS X4、删除字符串
NSMutableString
+ (void)deleteCharactersInRange:(NSRange)
NSMutableString *string = [NSMutableString stringWithString:@"Mac os"];
[string deleteCharactersInRange:NSMakeRanger(0,1)];
NSLog(string);
string --&5、字符串比较
- (BOOL)isEqualToString:(NSString *)6、比较前置串和后置串
- (BOOL)hasPrefix:(NSString *)
- (BOOL)hasSuffix:(NSString *)
NSString *str1 = @"Mac OS";
NSString *str2 = @"Mac Pro";
flag = [str1 hasPrefix:@"Mac"];
flag = [str2 hasSuffix:@"OS"];
NO7、字符串检索
//如果找到就返回范围,否则NSRange的location项被设置为NSNotFound
- (NSRange)rangeOfString:(NSString *)subS
- (NSRange)rangeOfString:(NSString *)subString option:(unsigned)
- (NSRange)rangeOfString:(NSString *)subString option:(unsigned)mask
range:(NSRange)
-----mask常用选项列表
NSCaseInsensitiveSearch
不区分字母大小写
NSLiteralSearch
对字符串进行字节单位的比较,一般可提高检索速度
NSBackwardsSearch
从范围的末尾开始检索
NSAnchoredSearch
仅检索制定范围的前部。忽略字符串中间的检索字符
NSString *string = @"hello world";
NSRange range = [string rangeOfString:@"he"];
if(range.location != NSNotFound)
NSLog(@" location=%d,length=%d",range.location,range.length);
}8、截取字符串
- (NSString *)substringToIndex:(unsigned)
//返回字符串开头至index位的字符串 不包含索引位
- (NSString *)substringFromIndex:(unsigned) //返回字符串第index位至末尾的字符串 包含索引位
- (NSString *)substringWithRange:(NSRange)
//返回字符串中范围range内的字符串 包含索引位
NSString *string = [string substringWithRange:NSMakeRange(5,2)];9、读取文本文件
+ (id)stringWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
//自动释放内存
- (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error
NSString *string = [NSString stringWithContentsOfFile:@"/user/test/yw.txt" encoding:NSUTF8StringEncoding error:&error];
if(string){}10、输出文本文件
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error
//参数 atomically 暂时将文件保存到辅助文件中
The file to which to write the receiver. If path contains a tilde (~) character, you must expand it with stringByExpandingTildeInPath before invoking this method.
----下面是网上找的例子 感谢 @chenshizero
//扩展路径
NSString *Path = @"~/NSData.txt";
NSString *absolutePath = [Path stringByExpandingTildeInPath];
NSLog(@"absolutePath:%@",absolutePath);
NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]);
//文件扩展名
NSString *Path = @"~/NSData.txt";
NSLog(@"Extension:%@",[Path pathExtension]);
[3] objective-c中的属性引见
&&&&来源:&互联网& 发布时间:&
objective-c中的属性介绍
我们知道在Objective-C中,使用@property配合@synthesize可以让编译器自动实现getter/setter方法,使用的时候也很方便,可以直接使用对象.属性的方法调用。NSString*NSUI@property(nonatomic,copy)NSString*@property(assign)NSUInteger
那如果我们想要对象.方法的方式来调用一个方法并获取到方法的返回值,那就需要使用@property配合@dynamic了。@property(readonly)NSString*
firstArrayV@dynamic
firstArrayV- (NSString*)firstArrayValue{
return [_array objectAtIndex:0];}
这样就可以使用对象.firstArrayValue来获取到_array数组中的第一个值了,很显然,这种方法并不适用于需要传递参数的方法。 其实使用@dynamic关键字是告诉编译器由我们自己来实现访问方法。如果使用的是@synthesize,那么这个工作编译器就会帮你实现了。
说明:代码只为示例代码,实际使用时每句代码要放到相应位置的。 ===== 最后转载下关于@property(*)括号中的属性内容介绍 =====readonly此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。 readwrite此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析。 assign此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。 retain指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。 copy它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考“复制”部分。 nonatomic指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。
最新技术文章:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@)

我要回帖

更多关于 c语言 的文章

 

随机推荐