小编lhu*_*ath的帖子

所有指针都是从指向结构类型的指针派生的吗?

问题

是否所有指针都是从指向结构类型的指针派生的问题都不容易回答.我发现这是一个重要问题,主要有以下两个原因.

A.缺少指向"任何"不完整或对象类型的指针,对方便的函数接口施加了限制,例如:

int allocate(ANY_TYPE  **p,
             size_t    s);

int main(void)
{
    int *p;
    int r = allocate(&p, sizeof *p);
}
Run Code Online (Sandbox Code Playgroud)

[ 完整代码示例 ]

指向"任何"不完整或对象类型的现有指针明确描述为:

C99/ C11 §6.3.2.3 p1:

指向void的指针可以转换为指向任何不完整或对象类型的指针.[...]

从指向"任何"不完整或对象类型的现有指针派生的指针,指向void的指针,严格地是指向void的指针,并且不需要使用从指向"任何"不完整的指针派生的指针进行转换或对象类型.


B.程序员根据他们对特定实现的经验,使用基于不需要的假设的约定,有意识地或不知不觉地与指针的泛化相关,这种情况并不少见.假设,例如可转换,可表示为整数或共享公共属性:对象大小,表示或对齐.


标准的话

根据C99 §6.2.5 p27/ C11 §6.2.5 p28:

[...]所有指向结构类型的指针应具有相同的表示和对齐要求.[...]

其次是C99 TC3 Footnote 39/ C11 Footnote 48:

相同的表示和对齐要求意味着可互换性作为函数的参数,函数的返回值和联合的成员.

虽然标准没有说:"指向结构类型的指针"并且选择了以下单词:"所有指向结构类型的指针",但它没有明确指定它是否适用于这种指针的递归推导.在标准中提到指针的特殊属性的其他情况下,它没有明确指定或提及递归指针派生,这意味着"类型派生"适用,或者它没有 - 但它没有明确提到.

虽然在引用类型时使用"所有指针"的措辞使用两次,(对于结构和联合类型),而不是更明确的措辞:在整个标准中使用的"指针",我们不能总结它是否适用于这种指针的递归推导.

c struct pointers c99 strict-aliasing

28
推荐指数
1
解决办法
812
查看次数

UISearchDisplayController - 如何预加载searchResultTableView

我想在用户点按搜索栏时,但在输入任何文本之前显示一些默认内容.

我有一个使用settext的解决方案:

- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller {

   [searchDisplayController.searchBar setText:@" "];

}
Run Code Online (Sandbox Code Playgroud)

这有效,但它不优雅,搜索栏中的提示文字消失了.

有没有更好的方法将数据预加载到UISearchDisplayController中的SearchResultTableView,而无需在自定义控制器中自己实现整个UISearch功能?

有关所需效果的演示,请查看Safari的搜索框,如果点击它,搜索界面将打开,显示之前的搜索.

cocoa-touch uisearchbar uisearchdisplaycontroller ios

27
推荐指数
3
解决办法
6596
查看次数

隐藏公共访问的属性

我正在尝试声明仅供Private类别内部使用的属性:

@interface BarLayer (Private)

@property (readwrite, retain) MenuItemFont  *menuButton;
@property (readwrite, retain) Menu          *menuMenu;
@property (readwrite, retain) LabelAtlas    *messageLabel;

@end
Run Code Online (Sandbox Code Playgroud)

现在我想弄清楚我应该在哪里@synthesize.

我试过了:

@implementation BarLayer (Private)

@synthesize menuButton      = _menuButton;
@synthesize menuMenu        = _menuMenu;
@synthesize messageLabel    = _messageLabel;

@end
Run Code Online (Sandbox Code Playgroud)

在这里,编译器抱怨:

@synthesize不允许在类别的实现中

所以我尝试将它放在我的BarLayer实现中,但是在这里它没有在BarLayer界面中找到声明.

在界面中找不到属性'menuButton'的声明

正确的方法是什么?

objective-c

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

使用iCloud进行核心数据.同步问题.(MacOS vs iOS - 冲突)

我在使用CoreData和iCloud时遇到了一些问题.我使用了苹果开发者论坛(iCloud)中的示例 - IPhoneCoreDataRecipes项目,该项目通过iCloud表示与CoreData的工作.它工作正常,但出现了一些冲突,并非所有实体都在同步.

我可以在日志中看到以下警告:

Warning>: +[PFUbiquityRecordImportConflict createTransactionLogForTransactionEntry:withError:](607): CoreData: Ubiquity:  Unable to find transaction log for entry: <PFUbiquityTransactionEntry: 0x68b9a60> (entity: PFUbiquityTransactionEntry; id: 0x68c5d50 <x-coredata://697F667C-7541-43E7-B21B-5362D165537B/PFUbiquityTransactionEntry/p2> ; data: {
    actingPeer = "0x1526e0 <x-coredata://697F667C-7541-43E7-B21B-5362D165537B/PFUbiquityPeer/p1>";
    globalIDStr = "com.appmania.dreambookdata.coredata:DreamHistory:p1:mobile.99829CE6-D497-590F-B2F8-795CFFC84CCB";
    knowledgeVectorString = "mobile.99829CE6-D497-590F-B2F8-795CFFC84CCB:1";
    localIDStr = "x-coredata://D45E85ED-A2B7-48AC-96BF-6B2C64812656/DreamHistory/p1";
    storeMetadata = "0x12d4a0 <x-coredata://697F667C-7541-43E7-B21B-5362D165537B/PFUbiquityStoreMetadata/p1>";
    transactionDate = "2011-12-01 08:00:13 +0000";
    transactionLogFilename = "7C9AD5E3-457E-4E2B-8F1C-A7D8878E5BDB.1.cdt";
    transactionNumber = 1;
    transactionTypeNum = 0;
})
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决这些冲突吗?谢谢.

core-data ios icloud

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

Importing SwiftUI safeAreaInset into UIKit

safeAreaInset(edge:alignment:spacing:content:):

\n
\n

The modified view is inset by the height of content, from edge, with its safe area increased by the same amount.

\n
\n

看来 SwiftUIsafeAreaInset没有导入 UIKit 的安全区域:

\n
        ZStack {\n            Color.black\n            UIKitView()\n        }\n        .ignoresSafeArea(edges: .top)\n        .safeAreaInset(edge: .top) {\n            Text("TOP")\n                .frame(minHeight: 200)\n                .background(Color.cyan.opacity(0.5))\n        }\n
Run Code Online (Sandbox Code Playgroud)\n

在此示例中,视图black和 的UIKitView布局相同 - 它们忽略safeAreaInset:top和状态栏。

\n

问题是:如何了解UIKitView游戏中的安全区域?

\n

考虑以下:

\n
struct UIKitView: UIViewControllerRepresentable {\n    func makeUIViewController(context: Context) -> some UIViewController { ViewController() }\n …
Run Code Online (Sandbox Code Playgroud)

uikit safearealayoutguide swiftui

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

将脚本文件添加到Xcode存档

我的目标上有一个"运行脚本"阶段,它呈现PDF手册.我想将此手册包含在产品的Xcode存档中.

如何从脚本中告诉Xcode在归档阶段要将哪些文件添加到其归档中?

目前,该脚本将PDF放在BUILT_PRODUCTS_DIR中,但这似乎不够.

xsltproc -o >(fop -fo - -pdf "$BUILT_PRODUCTS_DIR/doc/$TARGET_NAME.pdf") \                                                                                                                                                       
    --stringparam use.extensions 0 \ 
    --stringparam fop1.extensions 1 \ 
    --stringparam draft.mode no \
    --stringparam admon.graphics 1 \ 
    --stringparam admon.graphics.extension .svg \
    /opt/local/share/xsl/docbook-xsl/fo/docbook.xsl \
    "$TARGET_NAME/manual.xml"
Run Code Online (Sandbox Code Playgroud)

bash xcode

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

为什么TransformedCollection没有实现hashCode?

我期望两个相同的变换到具有相同的结果对象hashCode.我想使用此属性来检查我的对象是否以有意义的方式更改.

不幸的是,Guava的TransformedCollection extends AbstractCollection(不像AbstractList)没有实现hashCode或等于,并且TransformedCollection本身没有这样的尝试.

  • 我们难道不能根据hashCode迭代器的顺序返回的值计算一个或者这样的值吗?
  • 或者这仍然不能保证相同hashCodes
  • 也许我们可以用一种无法解决TransformedCollection的方式来解决这个问题AbstractCollection

java collections guava

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

发布网点的最佳和最安全的做法是什么?

iOS文档说明你的视图控制器应该释放(并且nil,因为这是良好的做法,实际上是2.x兼容性必须的)-dealloc中任何保留的出口.

该文档还说明,如果要在视图不可见时发出清除并且发出内存警告,则应在-viewDidUnload中对其进行相同的操作.

我想知道两件事:

  1. 这是否意味着我应该复制我的所有插座发布代码?把它全部放在-dealloc和-viewDidUnload中?这是一个非常痛苦的维护,很容易忘记!
  2. 我保证在-viewDidUnload之后重新加载视图时会重新填充所有的插件,包括我的笔尖中引用非视图对象的插件吗?

理想的答案回答了上述两个问题,如果在-dealloc VS -viewDidUnload中最佳地释放哪些属性之间存在区别,则详细阐明这一区别.

memory ios

2
推荐指数
1
解决办法
875
查看次数