Copy Functions
在一般情况下,一个标准的复制操作,也可能被称为简单的任务,当您使用=操作符指定一个变量的值到另一个。例如,表达myInt2= myInt1导致整数内容的myInt1用于myInt1到由myInt2使用的内存的内存复制。两个独立的区域内存在复制操作,包含相同的值。然而,如果试图以这种方式复制的核心基础对象(Core Foundation object),要知道,你不会复制对象本身,只有引用(Reference)的对象。
例如,一个新核心基金可能会认为,为了使一个CFString对象的副本,她将使用表达式myCFString2= myCFString1的。再次,这表达不实际的字符串数据复制。因为myCFString1和myCFString2必须有CFStringRef的类型,这种表达只复制对象的引用。复制操作之后,你有两个副本的CFString。这种类型的副本是非常快的,因为只有引用(Reference)被复制,但重要的是要记住,复制在这样一个可变对象是危险的。方案,使用全局变量,如果一个应用程序的一部分,改变一个对象,使用引用(Reference)的副本,有没有其他地方的方案,其中有引用的副本,知道数据已经改变的方式。
如果你要复制一个对象,你必须使用由核心基金提供专门用于此目的的功能之一。继续与CFString例如,你将使用CFStringCreateCopy的创造一个全新的CFString对象包含相同的原始数据。 CreateCopy“功能也有提供核心基础类型的变种”CreateMutableCopy“,它返回一个可以修改的对象的副本。
Shallow Copy
复制复合对象,如集合对象,可以包含其他对象的对象,还必须进行谨慎。正如您所期望的那样,使用=操作符来执行重复的对象引用这些对象结果的副本。在对比简单像CFString和CFData对象,在“CreateCopy”提供的化合物,如CFArray和CFSet对象的功能实际执行浅拷贝。浅拷贝是指在这些对象的情况下,创建一个新的集合对象,但原始集合的内容不重复的对象引用复制到新的容器。这种类型的复制是非常有用的,例如,如果你有一个数组,是不可改变的,要重新排序。在这种情况下,你不希望重复所有包含的对象,因为没有必要改变他们,为什么使用了额外的内存?你想要的只是一套包括要改变的对象。在这里适用同样的风险与复制的简单类型的对象引用。
Deep Copy
当你想创建一个全新的复合对象,你必须执行一个深拷贝。一个深拷贝复制复合对象以及其包含的所有对象的内容。当前版本的核心基础,包括深执行的财产清单复制(见CFPropertyListCreateDeepCopy)的功能。如果你想创建其他结构的深拷贝,你可以执行深拷贝递归下降到复合对象和复制所有内容逐一自己。照顾,在执行此功能作为复合对象可以是递归,他们可能会直接或间接地包含了自己这可能会导致递归循环。
可简单的这样理解。
copy的目的 就是复制对象 也就是说要新建一个对象
不可变对象copy == 对象retain(内存优化机制的结果)
可变对象copy == 新建了个不可变对象
不可变/可变对象mutablecopy == 新建一个可变对象
分享到:
相关推荐
Copy functions Conventions Non-Instantiable non-classed fundamental types Instantiable classed types: objects Initialization and Destruction Non-instantiable classed types: Interfaces. Interface ...
- 增量运算符与bool操作数(Increment operator with bool operand)、register关键字(register keyword)、复制函数的隐式声明(Implicit declaration of copy functions)、动态异常规格(Dynamic exception ...
Contents Contents ii List of Tables x List of Figures xiv 1 Scope 1 2 Normative references 2 3 Terms and definitions 3 4 General principles 7 4.1 Implementation compliance . ....4.2 Structure of this ...
- **复制到非托管内存**:`Marshal.Copy(Array sourceArray, int sourceIndex, IntPtr dest, int count)` - **从非托管内存创建对象**:`Marshal.PtrToStructure(IntPtr ptr)` #### 示例:FindMemoryCard 书中还...
34. Duplicating Variable Contents: The Copy Constructor 35. Returning Values 36. Printing Information 37. Startup and Shutdown Functions 38. Calling User Functions 39. Initialization File Support 40. ...
它们通常包含过程(procedures)、函数(functions)和类(classes)定义。 3. **VFP语法**:VFP的语法类似于其他高级编程语言,包括变量声明、条件语句(如IF...THEN...ELSE)、循环(FOR, WHILE)、函数调用等。...
TeraCopy is a compact program designed to copy and move files at the ... TeraCopy can completely replace Explorer copy and move functions, allowing you work with files as usual. Full Unicode support.
- Measures the similarity between a signal and its delayed copy. - Useful in signal detection and estimation. - **Zero Mean Function (`ZeroMean`):** - Computes the mean value of a signal and ...
CANoe的官方代码,指导怎么通过VS...In CAPL programs you can call functions which you have implemented in your own Windows DLL. In doing so, the function from the DLL are exported through a function table.
Some STL functions to consider are copy, remove_if, for_each, and find. The member function find of class string should be considered as well. Regardless of the STL functions used, a solution should ...
描述中提到"there are lot of string program without using string functions in java/."进一步确认了这个主题,它表明我们将探讨如何在Java中实现字符串操作,而不用使用如`String`类提供的方法。 在Java中,...
+ 在 Windowing 下配置 Frame, Partition Keys 和 Order Keys, 可在 Expression 里使用 window function 如 lead(), lag() 和 aggregater function as window functions + 注意:在定义 window function 需要注意...
4.4 指向Member Functions的指针(Pointer-to-Member Functions) 支持“指向Virtual Member Functions”之指针 在多重继承之下,指向Member Functions的指针 “指向Member Functions之指针”的效率 4.5 Inline ...
- 复制数据到非托管内存 (`Marshal.Copy`)。 - 从非托管内存创建对象 (`Marshal.PtrToStructure`)。 #### 示例:查找内存卡 假设有一个非托管函数用于查找内存卡信息,可以使用 P/Invoke 来调用该函数,并使用 `...
This will copy the DelphiSpeedUpX.dll and DelphiSpeedUpLoaderX.bpl to $(DELPHI)\bin and it registers the DLL as an Known IDE package in the registry. === How to uninstall === Start the ...
The Copy Constructor 528 Section 12.3. Using const with Classes 540 Section 12.4. Objects, Functions and Pointers 556 Section 12.5. Dynamic Allocation of Objects 581 Section 12.6. Static Data...
You can easily copy the memory address of the desired function, paste it into your debugger, and set a breakpoint for this memory address. When this function is called, the debugger will stop in the ...
11: References & the Copy-Constructor 12: Operator Overloading 13: Dynamic Object Creation 14: Inheritance & Composition 15: Polymorphism & Virtual Functions 16: Introduction to Templates A: Coding ...
However, it requires that a copy of AutoHotkey.exe exist in the directory above the compiler directory (which is normally the case). If AutoHotkey.exe is absent, the compiler still works but library ...
Example Here's a simple example of the JW Image Rotator embedded in a page. Copy-paste the source code and put the files on your site to get started...A tutorial with all functions of the javascript API.