Вам не нужно делать это с некоторыми исключениями, так как вы можете получить предупреждение, если объект, на который вы указываете функцию, - volatile
или const
- обычно имеет другой атрибут.
void ee(void *q)
{
pritntf("%p", q);
}
volatile int g;
const int f;
int main()
{
ee(&g);
ee(&f);
}
дает это предупреждение:
<source>: In function 'main':
<source>:17:8: warning: passing argument 1 of 'ee' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers]
ee(&g);
^~
<source>:6:15: note: expected 'void *' but argument is of type 'volatile int *'
void ee(void *q)
~~~~~~^
<source>:18:8: warning: passing argument 1 of 'ee' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
ee(&f);
^~
<source>:6:15: note: expected 'void *' but argument is of type 'const int *'
void ee(void *q)
~~~~~~^
Compiler returned: 0
Ну, не очень эффективный, но приятный на вид способ -
NSString *string = @"abcde\nfghijk\nlmnopq\nrstu";
NSInteger length = [[string componentsSeparatedByCharactersInSet:
[NSCharacterSet newlineCharacterSet]] count];
Swift 4:
myString.components(separatedBy: .newlines)
Apple рекомендует этот метод:
NSString *string;
unsigned numberOfLines, index, stringLength = [string length];
for (index = 0, numberOfLines = 0; index < stringLength; numberOfLines++)
index = NSMaxRange([string lineRangeForRange:NSMakeRange(index, 0)]);
См. Статью . Они также объясняют, как считать строки в переносе текста.