标签: core-foundation

我什么时候应该使用 NSURLCanonicalPathKey?

在 macOS 10.12 中,NSURLCanonicalPathKey被添加到NSURL. 文档指出:

\n\n
\n

URL 的路径作为规范的绝对文件系统路径。

\n
\n\n

除此之外,我看到的唯一其他文档/信息来自Swift 论坛帖子,其中指出:

\n\n
\n

您可能想查看 .canonicalPathKey (NSURLCanonicalPathKey)。在 Apple 平台上,许多标准 UNIXy 路径都存在于 /private/ 中,并具有来自根目录的相应符号链接。所以/etc/实际上是/private/etc/。如果您不\xe2\x80\x99t 规范化路径,您可能会因此而陷入困境。

\n
\n\n

这对我来说似乎是一件大事,但令我惊讶的是它只在 10.12 中引入。我曾经只依赖NSURLPathKey.path书签数据来解析 URL,但从来没有遇到过问题

\n\n
    \n
  • 我现在应该在以前使用过的所有地方都使用规范路径\n标准路径值吗?

  • \n
  • 如果我将路径信息作为字符串存储在数据库中,我应该存储.pathor的值吗NSURLCanonicalPathKey

  • \n
  • 如果我将 转换NSURL为字符串表示形式以在需要文件路径的 C/C++ 库中使用,我应该使用规范路径表示形式吗?

  • \n
  • 如果您要向用户显示文件的路径,是否应该显示规范路径?

  • \n
  • 与和NSURLCanonicalPathKey相比如何,它们似乎做了相同的事情或相反的事情......(?)URLByStandardizingPathURLByResolvingSymlinksInPath

  • \n
\n\n

这是在 macOS 10.14 上,我只考虑指向文件或文件夹的 URL。我知道书签数据可能应该存储在数据库中而不是路径中。

\n

url macos cocoa core-foundation appkit

5
推荐指数
1
解决办法
392
查看次数

在CFMutableDictionary中存储C结构

由于Core Foundation中没有NSValue的副本,我们如何在CFMutableDictionary中存储C结构?

iphone objective-c core-foundation

4
推荐指数
1
解决办法
1046
查看次数

类属性mVar和实例变量self.mVar之间的区别

我对于通过self访问实例变量或仅通过名称(在类中工作时)之间的区别感到困惑.

例如,参加这个课程:

//In .h file:
@interface Register : NSObject {
    NSString *mName;
}

- (id) initWithName:(NSString *) name;

//In .m file:
- (id) initWithName:(NSString *)name
{
    if (self == [super init])
    {
        mName = name;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

通过访问实例变量之间的区别是什么

self.mName = name;
Run Code Online (Sandbox Code Playgroud)

VS

mName = name;
Run Code Online (Sandbox Code Playgroud)

哪个不是@property而且不是@ sythenize'd.

说这是这个,但是这个例子:

//In .h file:
@interface Manange_My_ViewsViewController : UIViewController { 
    IBOutlet UILabel *countLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *countLabel;

//In .m file:
@synthesize countLabel;

- (void) updateLabel:(NSUInteger)count
{
    countLabel.text = [NSString …
Run Code Online (Sandbox Code Playgroud)

oop iphone objective-c self core-foundation

4
推荐指数
1
解决办法
1343
查看次数

比较NSCFString和NSCFBoolean

我正在使用SBJsonParser来解析JSON.输入可以是0或字符串(例如a829d901093),如果它为零,则返回NSCFBoolean,如果返回其字符串NSCFString.我怎么知道哪一个被退回?谢谢!

macos cocoa objective-c core-foundation

4
推荐指数
1
解决办法
2377
查看次数

NSDate作为NSDictionary的键

是否可以在NSDictionary中添加NSDate作为键和一些数组?

我没有任何要求将字典写入磁盘 - 归档或取消归档,就像这个人需要它一样:NSDictionary使用NSDates作为密钥

但是,为什么我希望将NSDate作为键特别添加,以便我可以从字典中获取所有键并进行一些计算,例如从一个范围内获取日期.

具有相同日期值的两个对象在创建时是否共享相同的内存?

是否可以将NSDate作为关键?此外,我可能会面临这个假设的其他问题?

谢谢,

拉吉

编辑: 发布我的问题后,我刚刚写了一个示例代码:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[dateComps setDay:1];
[dateComps setMonth:1];
[dateComps setYear:2012];
NSDate *date1 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSDate *date2 = [[NSCalendar currentCalendar] dateFromComponents:dateComps];
NSLog(@"Date 1 = %x, Date 2 = %x", date1, date2);
Run Code Online (Sandbox Code Playgroud)

输出:

Date 1 = 7945610, Date 2 = bd03610
Run Code Online (Sandbox Code Playgroud)

但是,NSDictionary的关键比较是否将这两个NSDate对象解释为不同?

另一个编辑:

另外,如果我应该使用NSDateFormatter将NSDate转换为NSString,我无法直接检查范围内的日期.我将不得不执行以下步骤:

  1. 从字典中获取所有NSString键
  2. 将它们转换回NSDate数组
  3. 执行谓词并获取范围内的日期
  4. 再次将这些日期转换回字符串数组
  5. 现在使用此字符串键从字典中获取值!

那么,还有更好的方法吗?

cocoa cocoa-touch nsdictionary nsdate core-foundation

4
推荐指数
1
解决办法
5053
查看次数

在更改CFDataRef的字节时,iOS 6上的EXC_BAD_ACCESS,但不是5

我有一个应用程序,可以将各种过滤器应用于图像.它在iOS 5上运行良好但在6上崩溃.下面是它崩溃的地方示例:

CGImageRef inImage = self.CGImage;
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); 

int length = CFDataGetLength(m_DataRef);

for (int i=0; i<length; i+=4)
{
    if(filter == filterCurve){

    int r = i;
    int g = i+1;
    int b = i+2;

    int red = m_PixelBuf[r];
    int green = m_PixelBuf[g];
    int blue = m_PixelBuf[b];

    m_PixelBuf[r] = SAFECOLOR(red); //    <==== EXC_BAD_ACCESS (code = 2)
    m_PixelBuf[g] = SAFECOLOR(green);
    m_PixelBuf[b] = SAFECOLOR(blue);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将值重新分配给时,请注意错误的访问点m_PixelBuf.任何人都知道为什么会这样?iOS 6中的内容会导致什么?

exc-bad-access core-foundation cfdata ios ios6

4
推荐指数
1
解决办法
2371
查看次数

在C中,如何从MacOSX应用程序包中写入文件

我想通过将文本转储到文件来调试我的应用程序中的一些东西,如下所示:

FILE *file; 
file = fopen("/tmp/file.txt","a+");
fprintf(file,"%s\n", "silly debug message"); 
fclose(file);
Run Code Online (Sandbox Code Playgroud)

当我将文件作为./myapplication运行时,这是有效的.但是,当我将其捆绑为应用程序包(使用gtk-osx-applicationgtk-mac-bundler)并运行应用程序包时,不会创建该文件.它无声地失败并继续执行.

有什么想法吗?是否有沙盒正在进行?

c macos file-io core-foundation

4
推荐指数
1
解决办法
682
查看次数

分配属性,ARC和Core Foundation对象

编辑2.

感谢Ken,现在正在努力.我甚至认为我理解为什么:-)

这是修改后的行:

- (void) reCreatePath {
    CGMutablePathRef p = ::CGPathCreateMutable() ;

    ::CGPathMoveToPoint         (p, 0, TL.x, TL.y) ;
    // [snip]
    ::CGPathAddLineToPoint      (p, 0, BL.x, BL.y) ;
    ::CGPathCloseSubpath(p) ;


    self.path = p ;
    ::CGPathRelease(p) ;   // <<== THIS IS IT!! :-)
}
Run Code Online (Sandbox Code Playgroud)

编辑.

我还是不明白.我试过Chuck的建议:

@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef  path ;
Run Code Online (Sandbox Code Playgroud)

像这样:

@interface TopLeftSlidingView  ()

@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef  path ;

@end
Run Code Online (Sandbox Code Playgroud)

在我重新创建CGPath的时候:

- (void) reCreatePath {
    CGMutablePathRef p = ::CGPathCreateMutable() ;

    ::CGPathMoveToPoint         (p, 0, TL.x, TL.y) ; …
Run Code Online (Sandbox Code Playgroud)

objective-c core-foundation automatic-ref-counting

4
推荐指数
1
解决办法
2596
查看次数

CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED:何时使用?

我不确定是否使用CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED为我的自定义函数返回a CFDataProviderRef.

根据定义宏的位置的文档,两者都应该只在特殊情况下使用,并且正确的修复应该是修复我的命名约定.然而,swift/objective-c文档建议使用它们来注释返回CoreFoundation指针的任何函数,而不是真正解释何时使用哪个 - 如果我不注释它们,我需要每次在swift代码中手动指定行为.

我能找到的进一步文档解释了如何使用+1值的+1值和0的另一个值,但是我担心这对我的理解没有多大帮助.

我的问题:

  1. 我应该使用它们,还是按照Base.h建议改进我的命名?
  2. 在那里使用的确切命名约定是什么?
  3. 如果我希望退出对象使用的内存一旦超出调用者的范围就会自由使用,而另一个如果我不希望这种情况发生(因为我在其他地方使用指针,或清理自己)?
  4. 我的所有功能都是返回CFDataProviderRef我通过呼叫获得的CGDataProviderCreateSequential.我猜这意味着我希望行为为CGDataProviderCreateSequential(对吧?).如何找到该函数是否使用CF_RETURNS_RETAINED或CF_RETURNS_NOT_RETAINED(CGDataProvider.h文件中是否存在)?

objective-c core-foundation automatic-ref-counting swift

4
推荐指数
1
解决办法
1790
查看次数

如何在OS X目标中创建CFDictionary?

根据文档 CFDictionaryCreate用于实例化CFDictionary swift.

func CFDictionaryCreate(_ allocator: CFAllocator!,
                  _ keys: UnsafeMutablePointer<UnsafePointer<Void>>,
                  _ values: UnsafeMutablePointer<UnsafePointer<Void>>,
                  _ numValues: CFIndex,
                  _ keyCallBacks: UnsafePointer<CFDictionaryKeyCallBacks>,
                  _ valueCallBacks: UnsafePointer<CFDictionaryValueCallBacks>) -> CFDictionary!
Run Code Online (Sandbox Code Playgroud)

我怎样才能创建keysvalues参数?到目前为止,我已尝试使用swift的String类型,希望它会自动转换为适当的类型:

import Foundation

var keys : [String] = ["key1", "key2"]
var values : [String] = ["value1", "value2"]
var keyCallbacks = kCFTypeDictionaryKeyCallBacks
var valueCallbacks = kCFTypeDictionaryValueCallBacks
var dict : CFDictionary = CFDictionaryCreate(kCFAllocatorDefault,
    &keys, &values, 2, &keyCallbacks, &valueCallbacks)
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到一个错误,说String不是keysvalues数组元素的正确类型:

main.swift:41:2: error: 'String' is …
Run Code Online (Sandbox Code Playgroud)

macos core-foundation cfstring swift cfdictionary

4
推荐指数
1
解决办法
3316
查看次数